diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 7592c66..4b0384e 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -73,7 +73,6 @@
 import com.android.dialer.animation.AnimationListenerAdapter;
 import com.android.dialer.app.calllog.CallLogActivity;
 import com.android.dialer.app.calllog.CallLogAdapter;
-import com.android.dialer.app.calllog.CallLogAsync;
 import com.android.dialer.app.calllog.CallLogFragment;
 import com.android.dialer.app.calllog.CallLogNotificationsService;
 import com.android.dialer.app.calllog.IntentProvider;
@@ -99,6 +98,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.UiUtil;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.concurrent.ThreadUtil;
 import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.configprovider.ConfigProviderBindings;
@@ -912,9 +912,13 @@
 
   @Override
   public void getLastOutgoingCall(LastOutgoingCallCallback callback) {
-    new CallLogAsync()
-        .getLastOutgoingCall(
-            new CallLogAsync.GetLastOutgoingCallArgs(this, callback::lastOutgoingCall));
+    DialerExecutorComponent.get(this)
+        .dialerExecutorFactory()
+        .createUiTaskBuilder(
+            getFragmentManager(), "Query last phone number", Calls::getLastOutgoingCall)
+        .onSuccess(output -> callback.lastOutgoingCall(output))
+        .build()
+        .executeParallel(this);
   }
 
   /** Callback from child DialpadFragment when the dialpad is shown. */
diff --git a/java/com/android/dialer/app/calllog/CallLogAsync.java b/java/com/android/dialer/app/calllog/CallLogAsync.java
deleted file mode 100644
index 26435f3..0000000
--- a/java/com/android/dialer/app/calllog/CallLogAsync.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer.app.calllog;
-
-import android.content.Context;
-import android.os.AsyncTask;
-import android.provider.CallLog.Calls;
-import com.android.dialer.common.Assert;
-
-/**
- * Class to access the call log asynchronously to avoid carrying out database operations on the UI
- * thread, using an {@link AsyncTask}.
- *
- * <pre class="prettyprint"> Typical usage: ==============
- *
- * // From an activity... String mLastNumber = "";
- *
- * CallLogAsync log = new CallLogAsync();
- *
- * CallLogAsync.GetLastOutgoingCallArgs lastCallArgs = new CallLogAsync.GetLastOutgoingCallArgs(
- * this, new CallLogAsync.OnLastOutgoingCallComplete() { public void lastOutgoingCall(String number)
- * { mLastNumber = number; } }); log.getLastOutgoingCall(lastCallArgs); </pre>
- */
-public class CallLogAsync {
-
-  /** CallLog.getLastOutgoingCall(...) */
-  public AsyncTask getLastOutgoingCall(GetLastOutgoingCallArgs args) {
-    Assert.isMainThread();
-    return new GetLastOutgoingCallTask(args.callback).execute(args);
-  }
-
-  /** Interface to retrieve the last dialed number asynchronously. */
-  public interface OnLastOutgoingCallComplete {
-
-    /** @param number The last dialed number or an empty string if none exists yet. */
-    void lastOutgoingCall(String number);
-  }
-
-  /** Parameter object to hold the args to get the last outgoing call from the call log DB. */
-  public static class GetLastOutgoingCallArgs {
-
-    public final Context context;
-    public final OnLastOutgoingCallComplete callback;
-
-    public GetLastOutgoingCallArgs(Context context, OnLastOutgoingCallComplete callback) {
-      this.context = context;
-      this.callback = callback;
-    }
-  }
-
-  /** AsyncTask to get the last outgoing call from the DB. */
-  private class GetLastOutgoingCallTask extends AsyncTask<GetLastOutgoingCallArgs, Void, String> {
-
-    private final OnLastOutgoingCallComplete callback;
-
-    public GetLastOutgoingCallTask(OnLastOutgoingCallComplete callback) {
-      this.callback = callback;
-    }
-
-    // Happens on a background thread. We cannot run the callback
-    // here because only the UI thread can modify the view
-    // hierarchy (e.g enable/disable the dial button). The
-    // callback is ran rom the post execute method.
-    @Override
-    protected String doInBackground(GetLastOutgoingCallArgs... list) {
-      String number = "";
-      for (GetLastOutgoingCallArgs args : list) {
-        // May block. Select only the last one.
-        number = Calls.getLastOutgoingCall(args.context);
-      }
-      return number; // passed to the onPostExecute method.
-    }
-
-    // Happens on the UI thread, it is safe to run the callback
-    // that may do some work on the views.
-    @Override
-    protected void onPostExecute(String number) {
-      Assert.isMainThread();
-      callback.lastOutgoingCall(number);
-    }
-  }
-}
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 168589f..3edf6c6a 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -20,6 +20,7 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.QuickContact;
 import android.support.design.widget.FloatingActionButton;
 import android.support.v4.app.FragmentTransaction;
@@ -27,7 +28,9 @@
 import android.widget.ImageView;
 import com.android.dialer.calllog.ui.NewCallLogFragment;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.compat.CompatUtils;
+import com.android.dialer.constants.ActivityRequestCodes;
 import com.android.dialer.contactsfragment.ContactsFragment;
 import com.android.dialer.contactsfragment.ContactsFragment.Header;
 import com.android.dialer.contactsfragment.ContactsFragment.OnContactSelectedListener;
@@ -117,6 +120,16 @@
   }
 
   @Override
+  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    super.onActivityResult(requestCode, resultCode, data);
+    if (requestCode == ActivityRequestCodes.DIALTACTS_VOICE_SEARCH) {
+      searchController.onVoiceResults(resultCode, data);
+    } else {
+      LogUtil.e("MainActivity.onActivityResult", "Unknown request code: " + requestCode);
+    }
+  }
+
+  @Override
   public void onContactSelected(ImageView photo, Uri contactUri, long contactId) {
     // TODO(calderwoodra): Add impression logging
     QuickContact.showQuickContact(
@@ -130,7 +143,13 @@
 
   @Override // DialpadListener
   public void getLastOutgoingCall(LastOutgoingCallCallback callback) {
-    // TODO(calderwoodra): migrate CallLogAsync class outside of dialer/app and call it here.
+    DialerExecutorComponent.get(this)
+        .dialerExecutorFactory()
+        .createUiTaskBuilder(
+            getFragmentManager(), "Query last phone number", Calls::getLastOutgoingCall)
+        .onSuccess(output -> callback.lastOutgoingCall(output))
+        .build()
+        .executeParallel(this);
   }
 
   @Override // DialpadListener
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index 041e32e..b01f80d 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -17,16 +17,22 @@
 package com.android.dialer.main.impl;
 
 import android.app.FragmentTransaction;
+import android.content.ActivityNotFoundException;
+import android.content.Intent;
 import android.os.Bundle;
+import android.speech.RecognizerIntent;
 import android.support.annotation.Nullable;
 import android.support.design.widget.FloatingActionButton;
+import android.support.v7.app.AppCompatActivity;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.animation.Animation;
 import android.view.animation.Animation.AnimationListener;
+import android.widget.Toast;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.constants.ActivityRequestCodes;
 import com.android.dialer.dialpadview.DialpadFragment;
 import com.android.dialer.dialpadview.DialpadFragment.DialpadListener;
 import com.android.dialer.dialpadview.DialpadFragment.OnDialpadQueryChangedListener;
@@ -36,6 +42,7 @@
 import com.android.dialer.searchfragment.list.NewSearchFragment.SearchFragmentListener;
 import com.android.dialer.util.ViewUtil;
 import com.google.common.base.Optional;
+import java.util.ArrayList;
 
 /**
  * Search controller for handling all the logic related to entering and exiting the search UI.
@@ -255,8 +262,12 @@
    */
   @Override
   public void onSearchBarClicked() {
+    openSearch(Optional.absent());
+  }
+
+  private void openSearch(Optional<String> query) {
     fab.hide();
-    toolbar.expand(/* animate=*/ true, Optional.absent());
+    toolbar.expand(/* animate=*/ true, query);
     toolbar.showKeyboard();
     hideBottomNav();
 
@@ -294,7 +305,28 @@
   }
 
   @Override
-  public void onVoiceButtonClicked(VoiceSearchResultCallback voiceSearchResultCallback) {}
+  public void onVoiceButtonClicked(VoiceSearchResultCallback voiceSearchResultCallback) {
+    try {
+      Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
+      mainActivity.startActivityForResult(voiceIntent, ActivityRequestCodes.DIALTACTS_VOICE_SEARCH);
+    } catch (ActivityNotFoundException e) {
+      Toast.makeText(mainActivity, R.string.voice_search_not_available, Toast.LENGTH_SHORT).show();
+    }
+  }
+
+  public void onVoiceResults(int resultCode, Intent data) {
+    if (resultCode == AppCompatActivity.RESULT_OK) {
+      ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
+      if (matches.size() > 0) {
+        LogUtil.i("MainSearchController.onVoiceResults", "voice search - match found");
+        openSearch(Optional.of(matches.get(0)));
+      } else {
+        LogUtil.i("MainSearchController.onVoiceResults", "voice search - nothing heard");
+      }
+    } else {
+      LogUtil.e("MainSearchController.onVoiceResults", "voice search failed");
+    }
+  }
 
   @Override
   public void openSettings() {}
diff --git a/java/com/android/dialer/main/impl/res/values/strings.xml b/java/com/android/dialer/main/impl/res/values/strings.xml
index f530fa2..0fc1246 100644
--- a/java/com/android/dialer/main/impl/res/values/strings.xml
+++ b/java/com/android/dialer/main/impl/res/values/strings.xml
@@ -46,4 +46,7 @@
   <string name="tab_title_voicemail">Voicemail</string>
   <!-- Tab text to show users their contacts  [CHAR LIMIT=10] -->
   <string name="tab_title_contacts">Contacts</string>
+
+  <!-- Message displayed when there is no application available to handle voice search. [CHAR LIMIT=NONE] -->
+  <string name="voice_search_not_available">Voice search not available</string>
 </resources>
diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailMediaPlayerView.java b/java/com/android/dialer/voicemail/listui/NewVoicemailMediaPlayerView.java
index 3becd27..dd59712 100644
--- a/java/com/android/dialer/voicemail/listui/NewVoicemailMediaPlayerView.java
+++ b/java/com/android/dialer/voicemail/listui/NewVoicemailMediaPlayerView.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.database.Cursor;
+import android.graphics.drawable.Drawable;
 import android.media.AudioManager;
 import android.net.Uri;
 import android.provider.VoicemailContract;
@@ -61,6 +62,8 @@
   private ImageButton deleteButton;
   private TextView currentSeekBarPosition;
   private SeekBar seekBarView;
+  private Drawable voicemailSeekHandleDisabled;
+
   private TextView totalDurationView;
   private TextView voicemailLoadingStatusView;
   private Uri voicemailUri;
@@ -96,6 +99,11 @@
     deleteButton = findViewById(R.id.deleteButton);
     totalDurationView = findViewById(R.id.playback_seek_total_duration);
     voicemailLoadingStatusView = findViewById(R.id.playback_state_text);
+
+    voicemailSeekHandleDisabled =
+        getContext()
+            .getResources()
+            .getDrawable(R.drawable.ic_voicemail_seek_handle_disabled, getContext().getTheme());
   }
 
   private void setupListenersForMediaPlayerButtons() {
@@ -142,7 +150,9 @@
 
     Assert.isNotNull(voicemailEntryFromAdapter);
     Uri uri = Uri.parse(voicemailEntryFromAdapter.voicemailUri());
+
     numberVoicemailFrom = voicemailEntryFromAdapter.number().getRawInput().getNumber();
+
     Assert.isNotNull(viewHolder);
     Assert.isNotNull(uri);
     Assert.isNotNull(listener);
@@ -167,6 +177,12 @@
     initializeMediaPlayerButtonsAndViews();
     setupListenersForMediaPlayerButtons();
 
+    // TODO(uabdullah): Handle seekbar seeking properly (a bug)
+    seekBarView.setEnabled(false);
+    seekBarView.setThumb(voicemailSeekHandleDisabled);
+
+    updatePhoneIcon(numberVoicemailFrom);
+
     // During the binding we only send a request to the adapter to tell us what the
     // state of the media player should be and call that function.
     // This could be the paused state, or the playing state of the resume state.
@@ -219,6 +235,23 @@
     }
   }
 
+  /**
+   * Updates the phone icon depending if we can dial it or not.
+   *
+   * <p>Note: This must be called after the onClickListeners have been set, otherwise isClickable()
+   * state is not maintained.
+   */
+  private void updatePhoneIcon(@Nullable String numberVoicemailFrom) {
+    // TODO(uabdullah): Handle restricted/blocked numbers (a bug)
+    if (TextUtils.isEmpty(numberVoicemailFrom)) {
+      phoneButton.setEnabled(false);
+      phoneButton.setClickable(false);
+    } else {
+      phoneButton.setEnabled(true);
+      phoneButton.setClickable(true);
+    }
+  }
+
   private final OnSeekBarChangeListener seekbarChangeListener =
       new OnSeekBarChangeListener() {
         @Override
@@ -466,11 +499,11 @@
           audioManager.setMode(AudioManager.STREAM_MUSIC);
           if (audioManager.isSpeakerphoneOn()) {
             LogUtil.i(
-                "NewVoicemailMediaPlayer.phoneButtonListener", "speaker was on, turning it off");
+                "NewVoicemailMediaPlayer.speakerButtonListener", "speaker was on, turning it off");
             audioManager.setSpeakerphoneOn(false);
           } else {
             LogUtil.i(
-                "NewVoicemailMediaPlayer.phoneButtonListener", "speaker was off, turning it on");
+                "NewVoicemailMediaPlayer.speakerButtonListener", "speaker was off, turning it on");
             audioManager.setSpeakerphoneOn(true);
           }
           // TODO(uabdullah): Handle colors of speaker icon when speaker is on and off.
@@ -478,8 +511,6 @@
       };
 
   // TODO(uabdullah): Add phone account handle (a bug)
-  // TODO(uabdullah): If the call cannot be made then the phone icon should be greyed out
-  // (a bug)
   private final View.OnClickListener phoneButtonListener =
       new View.OnClickListener() {
         @Override
diff --git a/java/com/android/dialer/voicemail/listui/res/drawable-hdpi/ic_handle.png b/java/com/android/dialer/voicemail/listui/res/drawable-hdpi/ic_handle.png
new file mode 100644
index 0000000..315a0dd
--- /dev/null
+++ b/java/com/android/dialer/voicemail/listui/res/drawable-hdpi/ic_handle.png
Binary files differ
diff --git a/java/com/android/dialer/voicemail/listui/res/drawable-mdpi/ic_handle.png b/java/com/android/dialer/voicemail/listui/res/drawable-mdpi/ic_handle.png
new file mode 100644
index 0000000..8bcec11
--- /dev/null
+++ b/java/com/android/dialer/voicemail/listui/res/drawable-mdpi/ic_handle.png
Binary files differ
diff --git a/java/com/android/dialer/voicemail/listui/res/drawable-xhdpi/ic_handle.png b/java/com/android/dialer/voicemail/listui/res/drawable-xhdpi/ic_handle.png
new file mode 100644
index 0000000..36f3466
--- /dev/null
+++ b/java/com/android/dialer/voicemail/listui/res/drawable-xhdpi/ic_handle.png
Binary files differ
diff --git a/java/com/android/dialer/voicemail/listui/res/drawable-xxhdpi/ic_handle.png b/java/com/android/dialer/voicemail/listui/res/drawable-xxhdpi/ic_handle.png
new file mode 100644
index 0000000..9a1651c
--- /dev/null
+++ b/java/com/android/dialer/voicemail/listui/res/drawable-xxhdpi/ic_handle.png
Binary files differ
diff --git a/java/com/android/dialer/voicemail/listui/res/drawable-xxxhdpi/ic_handle.png b/java/com/android/dialer/voicemail/listui/res/drawable-xxxhdpi/ic_handle.png
new file mode 100644
index 0000000..c6dbf38
--- /dev/null
+++ b/java/com/android/dialer/voicemail/listui/res/drawable-xxxhdpi/ic_handle.png
Binary files differ
diff --git a/java/com/android/dialer/voicemail/listui/res/drawable/ic_voicemail_seek_handle_disabled.xml b/java/com/android/dialer/voicemail/listui/res/drawable/ic_voicemail_seek_handle_disabled.xml
new file mode 100644
index 0000000..5e974c4
--- /dev/null
+++ b/java/com/android/dialer/voicemail/listui/res/drawable/ic_voicemail_seek_handle_disabled.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2015 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+  android:src="@drawable/ic_handle"
+  android:tint="@color/voicemail_icon_disabled_tint">
+</bitmap>
\ No newline at end of file
diff --git a/java/com/android/dialer/voicemail/listui/res/values/colors.xml b/java/com/android/dialer/voicemail/listui/res/values/colors.xml
new file mode 100644
index 0000000..6ecf4c2
--- /dev/null
+++ b/java/com/android/dialer/voicemail/listui/res/values/colors.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+<resources>
+  <color name="voicemail_icon_disabled_tint">#80000000</color>
+</resources>
\ No newline at end of file
