diff --git a/res/menu/dialpad_options.xml b/res/menu/dialpad_options.xml
index 6f0b5dd..c1f2515 100644
--- a/res/menu/dialpad_options.xml
+++ b/res/menu/dialpad_options.xml
@@ -19,6 +19,10 @@
         android:title="@string/add_contact"
         android:showAsAction="withText" />
     <item
+        android:id="@+id/menu_select_sim"
+        android:title="@string/menu_select_sim"
+        android:showAsAction="withText" />
+    <item
         android:id="@+id/menu_2s_pause"
         android:title="@string/add_2sec_pause"
         android:showAsAction="withText" />
@@ -26,7 +30,8 @@
         android:id="@+id/menu_add_wait"
         android:title="@string/add_wait"
         android:showAsAction="withText" />
-    <item android:id="@+id/menu_send_message"
+    <item
+        android:id="@+id/menu_send_message"
         android:title="@string/menu_sendTextMessage"
         android:showAsAction="withText" />
 </menu>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 18f0694..86604ed 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -93,7 +93,6 @@
     <!-- Margin below the search box. -->
     <dimen name="search_bottom_margin">8dp</dimen>
     <dimen name="search_collapsed_text_size">14sp</dimen>
-    <dimen name="search_expanded_text_size">20sp</dimen>
     <!-- Search box interior padding - left -->
     <dimen name="search_box_left_padding">8dp</dimen>
     <!-- Search box interior padding - right -->
diff --git a/src/com/android/dialer/DialerApplication.java b/src/com/android/dialer/DialerApplication.java
index 39a1ac7..e788144 100644
--- a/src/com/android/dialer/DialerApplication.java
+++ b/src/com/android/dialer/DialerApplication.java
@@ -1,16 +1,47 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
+/*
+ * Copyright (C) 2013 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;
 
 import android.app.Application;
 
+import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.extensions.ExtensionsFactory;
 
 public class DialerApplication extends Application {
 
+    private ContactPhotoManager mContactPhotoManager;
+
     @Override
     public void onCreate() {
         super.onCreate();
         ExtensionsFactory.init(getApplicationContext());
     }
+
+    @Override
+    public Object getSystemService(String name) {
+        if (ContactPhotoManager.CONTACT_PHOTO_SERVICE.equals(name)) {
+            if (mContactPhotoManager == null) {
+                mContactPhotoManager = ContactPhotoManager.createContactPhotoManager(this);
+                registerComponentCallbacks(mContactPhotoManager);
+                mContactPhotoManager.preloadPhotosInBackground();
+            }
+            return mContactPhotoManager;
+        }
+
+        return super.getSystemService(name);
+    }
 }
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index f5a2d3e..d48b28e 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -59,7 +59,6 @@
 import android.widget.FrameLayout;
 import android.widget.ImageButton;
 import android.widget.PopupMenu;
-import android.widget.RelativeLayout;
 import android.widget.Toast;
 
 import com.android.contacts.common.CallUtil;
@@ -69,7 +68,6 @@
 import com.android.contacts.common.dialog.SelectSIMDialogFragment;
 import com.android.contacts.common.interactions.ImportExportDialogFragment;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
-import com.android.contacts.common.util.ViewUtil;
 import com.android.contacts.common.widget.FloatingActionButtonController;
 import com.android.dialer.calllog.CallLogActivity;
 import com.android.dialer.database.DialerDatabaseHelper;
@@ -609,6 +607,9 @@
     @Override
     public void passSimUpdate(int simId) {
         mCurrentSimCard = simId;
+        if (mIsDialpadShown) {
+            mDialpadFragment.setSimCard(simId);
+        }
     }
 
     @Override
@@ -641,6 +642,7 @@
         }
         mIsDialpadShown = true;
         mDialpadFragment.setAnimate(animate);
+        mDialpadFragment.setSimCard(mCurrentSimCard);
 
         final FragmentTransaction ft = getFragmentManager().beginTransaction();
         ft.show(mDialpadFragment);
@@ -960,7 +962,9 @@
     @Override
     public void onBackPressed() {
         if (mIsDialpadShown) {
-            if (TextUtils.isEmpty(mSearchQuery)) {
+            if (TextUtils.isEmpty(mSearchQuery) ||
+                    (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()
+                            && mSmartDialSearchFragment.getAdapter().getCount() == 0)) {
                 exitSearchUi();
             }
             hideDialpadFragment(true, false);
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 134c2a7..bb58802 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -71,6 +71,7 @@
 
 import com.android.contacts.common.CallUtil;
 import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.dialog.SelectSIMDialogFragment;
 import com.android.contacts.common.dialpad.DialpadKeyButton;
 import com.android.contacts.common.dialpad.DialpadView;
 import com.android.contacts.common.util.PhoneNumberFormatter;
@@ -99,6 +100,16 @@
     private static final String TAG = DialpadFragment.class.getSimpleName();
 
     /**
+     * Constant to indicate there is only a single service provider available
+     */
+    private static final int NO_MULTI_SIM = -1;
+
+    /**
+     * Information about the currently selected SIM card.
+     */
+    private int mCurrentSimCard = NO_MULTI_SIM;
+
+    /**
      * This interface allows the DialpadFragment to tell its hosting Activity when and when not
      * to display the "dial" button. While this is logically part of the DialpadFragment, the
      * need to have a particular kind of slick animation puts the "dial" button in the parent.
@@ -850,7 +861,9 @@
             @Override
             public void show() {
                 final Menu menu = getMenu();
+                final MenuItem selectSim = menu.findItem(R.id.menu_select_sim);
                 final MenuItem sendMessage = menu.findItem(R.id.menu_send_message);
+                selectSim.setVisible(mCurrentSimCard != NO_MULTI_SIM);
                 sendMessage.setVisible(mSmsPackageComponentName != null);
 
                 boolean enable = !isDigitsEmpty();
@@ -1435,6 +1448,10 @@
                 smsIntent.setComponent(mSmsPackageComponentName);
                 DialerUtils.startActivityWithErrorToast(getActivity(), smsIntent);
             }
+            case R.id.menu_select_sim:
+              SelectSIMDialogFragment.show(getFragmentManager(), mCurrentSimCard);
+              return true;
+
             default:
                 return false;
         }
@@ -1604,6 +1621,10 @@
         return mAnimate;
     }
 
+    public void setSimCard(int simId) {
+        mCurrentSimCard = simId;
+    }
+
     public void setYFraction(float yFraction) {
         ((DialpadSlidingLinearLayout) getView()).setYFraction(yFraction);
     }
