diff --git a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
index 20d379c..c6d9205 100644
--- a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
+++ b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
@@ -65,6 +65,9 @@
   }
 
   private GlideRequest<Drawable> buildRequest(GlideRequests requestManager, PhotoInfo photoInfo) {
+    // Warning: Glide ignores extra attributes on BitmapDrawable such as tint and draw the bitmap
+    // directly so be sure not to set tint in the XML of any drawable referenced below.
+
     // The spam status takes precedence over whether the number is blocked.
     if (photoInfo.isSpam()) {
       return requestManager.load(R.drawable.ic_report_red_48dp);
diff --git a/java/com/android/dialer/glidephotomanager/impl/res/drawable-xxxhdpi/ic_block_black_48dp.png b/java/com/android/dialer/glidephotomanager/impl/res/drawable-xxxhdpi/ic_block_black_48dp.png
deleted file mode 100644
index 1168bd8..0000000
--- a/java/com/android/dialer/glidephotomanager/impl/res/drawable-xxxhdpi/ic_block_black_48dp.png
+++ /dev/null
Binary files differ
diff --git a/java/com/android/dialer/glidephotomanager/impl/res/drawable/ic_block_grey_48dp.xml b/java/com/android/dialer/glidephotomanager/impl/res/drawable/ic_block_grey_48dp.xml
index 42cfa99..9d2fb36 100644
--- a/java/com/android/dialer/glidephotomanager/impl/res/drawable/ic_block_grey_48dp.xml
+++ b/java/com/android/dialer/glidephotomanager/impl/res/drawable/ic_block_grey_48dp.xml
@@ -12,6 +12,13 @@
      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_block_black_48dp"
-    android:tint="#757575" />
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+  <path android:pathData="M0 0h24v24H0z"/>
+  <path
+      android:fillColor="#757575"
+      android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z"/>
+</vector>
\ No newline at end of file
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index 0296ec9..f1486ba 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -25,10 +25,13 @@
 import android.support.design.widget.FloatingActionButton;
 import android.support.v7.app.AppCompatActivity;
 import android.text.TextUtils;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.animation.Animation;
 import android.view.animation.Animation.AnimationListener;
 import android.widget.Toast;
+import com.android.contacts.common.dialog.ClearFrequentsDialog;
+import com.android.dialer.app.settings.DialerSettingsActivity;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
@@ -36,6 +39,8 @@
 import com.android.dialer.dialpadview.DialpadFragment;
 import com.android.dialer.dialpadview.DialpadFragment.DialpadListener;
 import com.android.dialer.dialpadview.DialpadFragment.OnDialpadQueryChangedListener;
+import com.android.dialer.logging.Logger;
+import com.android.dialer.logging.ScreenEvent;
 import com.android.dialer.main.impl.bottomnav.BottomNavBar;
 import com.android.dialer.main.impl.toolbar.MainToolbar;
 import com.android.dialer.main.impl.toolbar.SearchBarListener;
@@ -58,7 +63,7 @@
  *
  * @see #onBackPressed()
  */
-final class MainSearchController implements SearchBarListener {
+public class MainSearchController implements SearchBarListener {
 
   private static final String KEY_IS_FAB_HIDDEN = "is_fab_hidden";
   private static final String KEY_CURRENT_TAB = "current_tab";
@@ -74,7 +79,7 @@
   private final FloatingActionButton fab;
   private final MainToolbar toolbar;
 
-  MainSearchController(
+  public MainSearchController(
       MainActivity mainActivity,
       BottomNavBar bottomNav,
       FloatingActionButton fab,
@@ -324,6 +329,20 @@
     }
   }
 
+  @Override
+  public boolean onMenuItemClicked(MenuItem menuItem) {
+    if (menuItem.getItemId() == R.id.settings) {
+      mainActivity.startActivity(new Intent(mainActivity, DialerSettingsActivity.class));
+      Logger.get(mainActivity).logScreenView(ScreenEvent.Type.SETTINGS, mainActivity);
+      return true;
+    } else if (menuItem.getItemId() == R.id.clear_frequents) {
+      ClearFrequentsDialog.show(mainActivity.getFragmentManager());
+      Logger.get(mainActivity).logScreenView(ScreenEvent.Type.CLEAR_FREQUENTS, mainActivity);
+      return true;
+    }
+    return false;
+  }
+
   public void onVoiceResults(int resultCode, Intent data) {
     if (resultCode == AppCompatActivity.RESULT_OK) {
       ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
@@ -338,12 +357,6 @@
     }
   }
 
-  @Override
-  public void openSettings() {}
-
-  @Override
-  public void sendFeedback() {}
-
   public void onSaveInstanceState(Bundle bundle) {
     bundle.putBoolean(KEY_IS_FAB_HIDDEN, !fab.isShown());
     bundle.putInt(KEY_CURRENT_TAB, bottomNav.getSelectedTab());
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index a27bdd2..c46e61b 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -188,7 +188,7 @@
             mainActivity, mainActivity.getContentResolver(), bottomNav, toolbar);
     bottomNav.addOnTabSelectedListener(callLogFragmentListener);
 
-    searchController = new MainSearchController(mainActivity, bottomNav, fab, toolbar);
+    searchController = getNewMainSearchController(bottomNav, fab, toolbar);
     toolbar.setSearchBarListener(searchController);
 
     onDialpadQueryChangedListener = new MainOnDialpadQueryChangedListener(searchController);
@@ -355,6 +355,11 @@
     }
   }
 
+  public MainSearchController getNewMainSearchController(
+      BottomNavBar bottomNavBar, FloatingActionButton fab, MainToolbar mainToolbar) {
+    return new MainSearchController(mainActivity, bottomNavBar, fab, mainToolbar);
+  }
+
   /** @see OnContactSelectedListener */
   private static final class MainOnContactSelectedListener implements OnContactSelectedListener {
 
diff --git a/java/com/android/dialer/main/impl/toolbar/MainToolbar.java b/java/com/android/dialer/main/impl/toolbar/MainToolbar.java
index 1d7f7ce..6044229 100644
--- a/java/com/android/dialer/main/impl/toolbar/MainToolbar.java
+++ b/java/com/android/dialer/main/impl/toolbar/MainToolbar.java
@@ -36,6 +36,7 @@
 
   private SearchBarView searchBar;
   private SearchBarListener listener;
+  private MainToolbarMenu overflowMenu;
   private boolean isSlideUp;
 
   public MainToolbar(Context context, AttributeSet attrs) {
@@ -46,7 +47,7 @@
   protected void onFinishInflate() {
     super.onFinishInflate();
     ImageButton optionsMenuButton = findViewById(R.id.main_options_menu_button);
-    MainToolbarMenu overflowMenu = new MainToolbarMenu(getContext(), optionsMenuButton);
+    overflowMenu = new MainToolbarMenu(getContext(), optionsMenuButton);
     overflowMenu.inflate(R.menu.main_menu);
     overflowMenu.setOnMenuItemClickListener(this);
     optionsMenuButton.setOnClickListener(v -> overflowMenu.show());
@@ -57,12 +58,7 @@
 
   @Override
   public boolean onMenuItemClick(MenuItem menuItem) {
-    if (menuItem.getItemId() == R.id.settings) {
-      listener.openSettings();
-    } else if (menuItem.getItemId() == R.id.feedback) {
-      listener.sendFeedback();
-    }
-    return false;
+    return listener.onMenuItemClicked(menuItem);
   }
 
   public void setSearchBarListener(SearchBarListener listener) {
@@ -129,4 +125,8 @@
   public void showKeyboard() {
     searchBar.showKeyboard();
   }
+
+  public MainToolbarMenu getOverflowMenu() {
+    return overflowMenu;
+  }
 }
diff --git a/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java b/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java
index f4dfeef..3c6e361 100644
--- a/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java
+++ b/java/com/android/dialer/main/impl/toolbar/MainToolbarMenu.java
@@ -22,18 +22,15 @@
 import android.view.View;
 
 /** Popup menu accessible from the search bar */
-final class MainToolbarMenu extends PopupMenu {
+public final class MainToolbarMenu extends PopupMenu {
 
   public MainToolbarMenu(Context context, View anchor) {
-    super(context, anchor, Gravity.TOP);
-    // TODO(calderwoodra): menu should open from the top, not the bottom
+    super(context, anchor, Gravity.NO_GRAVITY, R.attr.actionOverflowMenuStyle, 0);
   }
 
   @Override
   public void show() {
     super.show();
-    // TODO(calderwoodra): show/hide clear frequents
-    // TODO(calderwoodra): only show call history item if we have phone permission
     // TODO(calderwoodra): show simulator buttons
   }
 }
diff --git a/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java b/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java
index 2e31997..a074b51 100644
--- a/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java
+++ b/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java
@@ -16,6 +16,8 @@
 
 package com.android.dialer.main.impl.toolbar;
 
+import android.view.MenuItem;
+
 /** Useful callback for {@link SearchBarView} listeners. */
 public interface SearchBarListener {
 
@@ -31,11 +33,8 @@
   /** Called when the voice search button is clicked. */
   void onVoiceButtonClicked(VoiceSearchResultCallback voiceSearchResultCallback);
 
-  /** Called when the settings option is selected from the search menu. */
-  void openSettings();
-
-  /** Called when send feedback is selected from the search menu. */
-  void sendFeedback();
+  /** Called when a toolbar menu item is clicked. */
+  boolean onMenuItemClicked(MenuItem menuItem);
 
   /** Interface for returning voice results to the search bar. */
   interface VoiceSearchResultCallback {
diff --git a/java/com/android/dialer/main/impl/toolbar/res/menu/main_menu.xml b/java/com/android/dialer/main/impl/toolbar/res/menu/main_menu.xml
index 5b09fca..01309dd 100644
--- a/java/com/android/dialer/main/impl/toolbar/res/menu/main_menu.xml
+++ b/java/com/android/dialer/main/impl/toolbar/res/menu/main_menu.xml
@@ -22,7 +22,7 @@
       app:showAsAction="collapseActionView"/>
 
   <item
-      android:id="@+id/feedback"
-      android:title="@string/main_send_feedback"
+      android:id="@+id/clear_frequents"
+      android:title="@string/main_menu_clear_frequents"
       app:showAsAction="collapseActionView"/>
 </menu>
\ No newline at end of file
diff --git a/java/com/android/dialer/main/impl/toolbar/res/values/strings.xml b/java/com/android/dialer/main/impl/toolbar/res/values/strings.xml
index 6af235b..66ccfb4 100644
--- a/java/com/android/dialer/main/impl/toolbar/res/values/strings.xml
+++ b/java/com/android/dialer/main/impl/toolbar/res/values/strings.xml
@@ -37,8 +37,8 @@
 
   <!-- Show users their settings [CHAR LIMIT=20] -->
   <string name="settings">Settings</string>
-  <!-- Send feedback about the app [CHAR LIMIT=20] -->
-  <string name="main_send_feedback">Send feedback</string>
+  <!--  The menu item to clear frequents [CHAR LIMIT=30] -->
+  <string name="main_menu_clear_frequents">Clear frequents</string>
 
   <!-- Remove button that shows up when contact is long-pressed. [CHAR LIMIT=NONE] -->
   <string name="main_remove_contact">Remove</string>
diff --git a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
index 874bdbc..ce4030d 100644
--- a/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
+++ b/java/com/android/dialer/phonelookup/consolidator/PhoneLookupInfoConsolidator.java
@@ -159,6 +159,7 @@
       case NameSource.CP2_REMOTE:
         return Assert.isNotNull(firstCp2RemoteContact).getLookupUri();
       case NameSource.PEOPLE_API:
+        return Assert.isNotNull(phoneLookupInfo.getPeopleApiInfo().getLookupUri());
       case NameSource.NONE:
         return "";
       default:
diff --git a/java/com/android/dialer/phonelookup/phone_lookup_info.proto b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
index 57a61ac..e9cb9f8 100644
--- a/java/com/android/dialer/phonelookup/phone_lookup_info.proto
+++ b/java/com/android/dialer/phonelookup/phone_lookup_info.proto
@@ -117,6 +117,11 @@
     // The type of the lookup result, for example, a saved contact or a nearby
     // business.
     optional InfoType info_type = 6;
+
+    // A URI that contains encoded JSON about the number so contacts can
+    // populate the quick contact activity with name and numbers. This does not
+    // point to any real contact entry anywhere.
+    optional string lookup_uri = 7;
   }
   optional PeopleApiInfo people_api_info = 3;
 
diff --git a/java/com/android/incallui/AudioRouteSelectorActivity.java b/java/com/android/incallui/AudioRouteSelectorActivity.java
index a6fcc9c..7728cd5 100644
--- a/java/com/android/incallui/AudioRouteSelectorActivity.java
+++ b/java/com/android/incallui/AudioRouteSelectorActivity.java
@@ -17,6 +17,7 @@
 package com.android.incallui;
 
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.FragmentActivity;
 import android.telecom.CallAudioState;
@@ -26,24 +27,21 @@
 import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment;
 import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter;
 import com.android.incallui.call.CallList;
+import com.android.incallui.call.CallList.Listener;
 import com.android.incallui.call.DialerCall;
 import com.android.incallui.call.TelecomAdapter;
 
 /** Simple activity that just shows the audio route selector fragment */
 public class AudioRouteSelectorActivity extends FragmentActivity
-    implements AudioRouteSelectorPresenter {
-
-  public static final String SHOULD_LOG_BUBBLE_V2_IMPRESSION_EXTRA = "shouldLogBubbleV2Impression";
-
-  private boolean shouldLogBubbleV2Impression;
+    implements AudioRouteSelectorPresenter, Listener {
 
   @Override
   protected void onCreate(@Nullable Bundle bundle) {
     super.onCreate(bundle);
-    shouldLogBubbleV2Impression =
-        getIntent().getBooleanExtra(SHOULD_LOG_BUBBLE_V2_IMPRESSION_EXTRA, false);
     AudioRouteSelectorDialogFragment.newInstance(AudioModeProvider.getInstance().getAudioState())
         .show(getSupportFragmentManager(), AudioRouteSelectorDialogFragment.TAG);
+
+    CallList.getInstance().addListener(this);
   }
 
   @Override
@@ -51,10 +49,6 @@
     TelecomAdapter.getInstance().setAudioRoute(audioRoute);
     finish();
 
-    if (!shouldLogBubbleV2Impression) {
-      return;
-    }
-
     // Log the select action with audio route and call
     DialerImpression.Type impressionType = null;
     if ((audioRoute & CallAudioState.ROUTE_WIRED_OR_EARPIECE) != 0) {
@@ -68,10 +62,7 @@
       return;
     }
 
-    DialerCall call = CallList.getInstance().getOutgoingCall();
-    if (call == null) {
-      call = CallList.getInstance().getActiveOrBackgroundCall();
-    }
+    DialerCall call = getCall();
     if (call != null) {
       Logger.get(this)
           .logCallImpression(impressionType, call.getUniqueCallId(), call.getTimeAddedMs());
@@ -102,4 +93,46 @@
       finish();
     }
   }
+
+  @Override
+  protected void onDestroy() {
+    CallList.getInstance().removeListener(this);
+    super.onDestroy();
+  }
+
+  private DialerCall getCall() {
+    DialerCall dialerCall = CallList.getInstance().getOutgoingCall();
+    if (dialerCall == null) {
+      dialerCall = CallList.getInstance().getActiveOrBackgroundCall();
+    }
+    return dialerCall;
+  }
+
+  @Override
+  public void onDisconnect(DialerCall call) {
+    if (getCall() == null) {
+      finish();
+    }
+  }
+
+  @Override
+  public void onIncomingCall(DialerCall call) {}
+
+  @Override
+  public void onUpgradeToVideo(DialerCall call) {}
+
+  @Override
+  public void onSessionModificationStateChange(DialerCall call) {}
+
+  @Override
+  public void onCallListChange(CallList callList) {}
+
+  @Override
+  public void onWiFiToLteHandover(DialerCall call) {}
+
+  @Override
+  public void onHandoverToWifiFailed(DialerCall call) {}
+
+  @Override
+  public void onInternationalCallOnWifi(@NonNull DialerCall call) {}
 }
diff --git a/java/com/android/incallui/NewReturnToCallActionReceiver.java b/java/com/android/incallui/NewReturnToCallActionReceiver.java
index 23debe2..527a79b 100644
--- a/java/com/android/incallui/NewReturnToCallActionReceiver.java
+++ b/java/com/android/incallui/NewReturnToCallActionReceiver.java
@@ -110,7 +110,6 @@
   public void showAudioRouteSelector(Context context) {
     Intent intent = new Intent(context, AudioRouteSelectorActivity.class);
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
-    intent.putExtra(AudioRouteSelectorActivity.SHOULD_LOG_BUBBLE_V2_IMPRESSION_EXTRA, true);
     context.startActivity(intent);
   }
 
diff --git a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
index ebbaef8..fe6bbbc 100644
--- a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
+++ b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
@@ -370,11 +370,10 @@
   public void setHintText(@Nullable CharSequence hintText) {
     if (hintText == null) {
       swipeToAnswerText.setText(R.string.call_incoming_swipe_to_answer);
-      swipeToRejectText.setText(R.string.call_incoming_swipe_to_reject);
     } else {
       swipeToAnswerText.setText(hintText);
-      swipeToRejectText.setText(null);
     }
+    swipeToRejectText.setText(R.string.call_incoming_swipe_to_reject);
   }
 
   @Override
diff --git a/java/com/android/incallui/spam/res/values/strings.xml b/java/com/android/incallui/spam/res/values/strings.xml
index 3248c69..e893f2a 100644
--- a/java/com/android/incallui/spam/res/values/strings.xml
+++ b/java/com/android/incallui/spam/res/values/strings.xml
@@ -20,7 +20,7 @@
   <!-- Title for the notification to the user after a call from an unknown number ends. [CHAR LIMIT=100] -->
   <string name="non_spam_notification_title">Know <xliff:g id="number">%1$s</xliff:g>?</string>
   <!-- Title for the notification to the user after a call from an spammer ends. [CHAR LIMIT=100] -->
-  <string name="spam_notification_title">Was <xliff:g id="number">%1$s</xliff:g> a spam call?</string>
+  <string name="spam_notification_title">Was <xliff:g id="number">%1$s</xliff:g> a spam caller?</string>
   <!-- Text for the toast shown after the user presses block/report spam. [CHAR LIMIT=100] -->
   <string name="spam_notification_block_report_toast_text"><xliff:g id="number">%1$s</xliff:g> blocked and call was reported as spam.</string>
   <!-- Text for the toast shown after the user presses not spam. [CHAR LIMIT=100] -->
