diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index f1486ba..7098f88 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -16,6 +16,7 @@
 
 package com.android.dialer.main.impl;
 
+import android.app.Fragment;
 import android.app.FragmentTransaction;
 import android.content.ActivityNotFoundException;
 import android.content.Intent;
@@ -131,7 +132,15 @@
     transaction.commit();
   }
 
-  /** Hides the dialpad, reveals the FAB and slides the toolbar back onto the screen. */
+  /**
+   * Hides the dialpad, reveals the FAB and slides the toolbar back onto the screen.
+   *
+   * <p>This method intentionally "hides" and does not "remove" the dialpad in order to preserve its
+   * state (i.e. we call {@link FragmentTransaction#hide(Fragment)} instead of {@link
+   * FragmentTransaction#remove(Fragment)}.
+   *
+   * @see {@link #closeSearch(boolean)} to "remove" the dialpad.
+   */
   private void hideDialpad(boolean animate, boolean bottomNavVisible) {
     Assert.checkArgument(isDialpadVisible());
 
@@ -159,7 +168,7 @@
           @Override
           public void onAnimationEnd(Animation animation) {
             if (!(mainActivity.isFinishing() || mainActivity.isDestroyed())) {
-              mainActivity.getFragmentManager().beginTransaction().remove(dialpadFragment).commit();
+              mainActivity.getFragmentManager().beginTransaction().hide(dialpadFragment).commit();
             }
           }
 
@@ -227,7 +236,10 @@
     }
   }
 
-  /** Calls {@link #hideDialpad(boolean, boolean)} and removes the search fragment. */
+  /**
+   * Calls {@link #hideDialpad(boolean, boolean)}, removes the search fragment and clears the
+   * dialpad.
+   */
   private void closeSearch(boolean animate) {
     Assert.checkArgument(isSearchVisible());
     if (isDialpadVisible()) {
@@ -238,9 +250,17 @@
     showBottomNav();
     toolbar.collapse(animate);
     mainActivity.getFragmentManager().beginTransaction().remove(getSearchFragment()).commit();
+
+    // Clear the dialpad so the phone number isn't persisted between search sessions.
+    getDialpadFragment().clearDialpad();
   }
 
-  @Nullable
+  /**
+   * Returns {@link DialpadFragment}.
+   *
+   * <p>Unless this method is being called for the first time in {@link #openSearch(Optional)} or
+   * {@link #showDialpad(boolean)}, it should never return null.
+   */
   private DialpadFragment getDialpadFragment() {
     return (DialpadFragment)
         mainActivity.getFragmentManager().findFragmentByTag(DIALPAD_FRAGMENT_TAG);
@@ -295,6 +315,15 @@
     } else if (!isSearchVisible()) {
       transaction.show(getSearchFragment());
     }
+
+    // Add the dialpad fragment but keep it hidden
+    if (getDialpadFragment() == null) {
+      DialpadFragment dialpadFragment = new DialpadFragment();
+      transaction
+          .add(R.id.dialpad_fragment_container, dialpadFragment, DIALPAD_FRAGMENT_TAG)
+          .hide(dialpadFragment);
+    }
+
     transaction.commit();
   }
 
diff --git a/java/com/android/dialer/main/impl/res/layout/main_activity.xml b/java/com/android/dialer/main/impl/res/layout/main_activity.xml
index 2094a73..d8b13a6 100644
--- a/java/com/android/dialer/main/impl/res/layout/main_activity.xml
+++ b/java/com/android/dialer/main/impl/res/layout/main_activity.xml
@@ -67,6 +67,13 @@
       android:id="@+id/toolbar"
       layout="@layout/toolbar_layout"/>
 
+  <ImageView
+      android:layout_width="match_parent"
+      android:layout_height="2dp"
+      android:scaleType="fitXY"
+      android:src="@drawable/search_shadow"
+      android:layout_below="@+id/toolbar"/>
+
   <!-- TODO(calderwoodra): investigate what this is for and why we want it. -->
   <!-- Host container for the contact tile drag shadow -->
   <FrameLayout
diff --git a/java/com/android/dialer/main/impl/toolbar/res/drawable/search_shadow.xml b/java/com/android/dialer/main/impl/toolbar/res/drawable/search_shadow.xml
new file mode 100644
index 0000000..583ad20
--- /dev/null
+++ b/java/com/android/dialer/main/impl/toolbar/res/drawable/search_shadow.xml
@@ -0,0 +1,25 @@
+<?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.
+-->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+  <gradient
+      android:startColor="#3333"
+      android:endColor="#0333"
+      android:type="linear"
+      android:angle="90">
+  </gradient>
+</shape>
\ No newline at end of file
diff --git a/java/com/android/dialer/main/impl/toolbar/res/layout/expanded_search_bar.xml b/java/com/android/dialer/main/impl/toolbar/res/layout/expanded_search_bar.xml
index 4dbd4bf..4e49acc 100644
--- a/java/com/android/dialer/main/impl/toolbar/res/layout/expanded_search_bar.xml
+++ b/java/com/android/dialer/main/impl/toolbar/res/layout/expanded_search_bar.xml
@@ -36,7 +36,7 @@
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_toEndOf="@+id/search_back_button"
-      android:layout_toStartOf="@+id/search_close_button"
+      android:layout_toStartOf="@+id/search_clear_button"
       android:layout_centerVertical="true"
       android:layout_marginStart="8dp"
       android:minHeight="48dp"
diff --git a/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml b/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml
index 7c4cee2..59cc354 100644
--- a/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml
+++ b/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml
@@ -16,7 +16,6 @@
 <com.android.dialer.main.impl.toolbar.MainToolbar
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/toolbar"
     android:layout_width="match_parent"
     android:layout_height="?attr/actionBarSize"
     android:background="@color/dialer_theme_color"
diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java b/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java
index 044d8df..07a37c3 100644
--- a/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java
+++ b/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java
@@ -16,13 +16,16 @@
 package com.android.dialer.voicemail.listui;
 
 import android.app.FragmentManager;
+import android.content.ContentValues;
 import android.content.Context;
+import android.content.Intent;
 import android.database.Cursor;
 import android.media.MediaPlayer;
 import android.media.MediaPlayer.OnCompletionListener;
 import android.media.MediaPlayer.OnErrorListener;
 import android.media.MediaPlayer.OnPreparedListener;
 import android.net.Uri;
+import android.provider.VoicemailContract.Voicemails;
 import android.support.annotation.IntDef;
 import android.support.annotation.Nullable;
 import android.support.annotation.WorkerThread;
@@ -37,7 +40,6 @@
 import com.android.dialer.calllogutils.CallLogDates;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.common.concurrent.DialerExecutor.SuccessListener;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.concurrent.ThreadUtil;
@@ -48,6 +50,7 @@
 import com.android.dialer.voicemail.listui.error.VoicemailErrorMessageCreator;
 import com.android.dialer.voicemail.listui.error.VoicemailStatus;
 import com.android.dialer.voicemail.model.VoicemailEntry;
+import com.android.voicemail.VoicemailClient;
 import com.google.common.collect.ImmutableList;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -637,32 +640,37 @@
 
     collapseExpandedViewHolder(expandedViewHolder);
 
-    Worker<Pair<Context, Uri>, Integer> deleteVoicemail = this::deleteVoicemail;
-    SuccessListener<Integer> deleteVoicemailCallBack = this::onVoicemailDeleted;
+    Worker<Pair<Context, Uri>, Void> deleteVoicemail = this::deleteVoicemail;
 
     DialerExecutorComponent.get(context)
         .dialerExecutorFactory()
-        .createUiTaskBuilder(fragmentManager, "delete_voicemail", deleteVoicemail)
-        .onSuccess(deleteVoicemailCallBack)
+        .createNonUiTaskBuilder(deleteVoicemail)
         .build()
         .executeSerial(new Pair<>(context, voicemailUri));
 
     notifyItemRemoved(expandedViewHolder.getAdapterPosition());
   }
 
-  private void onVoicemailDeleted(Integer integer) {
-    LogUtil.i("NewVoicemailAdapter.onVoicemailDeleted", "return value:%d", integer);
-    Assert.checkArgument(integer == 1, "voicemail delete was not successful");
-  }
-
   @WorkerThread
-  private Integer deleteVoicemail(Pair<Context, Uri> contextUriPair) {
+  private Void deleteVoicemail(Pair<Context, Uri> contextUriPair) {
     Assert.isWorkerThread();
     LogUtil.enterBlock("NewVoicemailAdapter.deleteVoicemail");
+
     Context context = contextUriPair.first;
     Uri uri = contextUriPair.second;
     LogUtil.i("NewVoicemailAdapter.deleteVoicemail", "deleting uri:%s", String.valueOf(uri));
-    return context.getContentResolver().delete(uri, null, null);
+    ContentValues values = new ContentValues();
+    values.put(Voicemails.DELETED, "1");
+
+    int numRowsUpdated = context.getContentResolver().update(uri, values, null, null);
+
+    LogUtil.i("NewVoicemailAdapter.onVoicemailDeleted", "return value:%d", numRowsUpdated);
+    Assert.checkArgument(numRowsUpdated == 1, "voicemail delete was not successful");
+
+    Intent intent = new Intent(VoicemailClient.ACTION_UPLOAD);
+    intent.setPackage(context.getPackageName());
+    context.sendBroadcast(intent);
+    return null;
   }
 
   /**
