diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index f5a2d3e..6144bb5 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -609,6 +609,9 @@
     @Override
     public void passSimUpdate(int simId) {
         mCurrentSimCard = simId;
+        if (mIsDialpadShown) {
+            mDialpadFragment.setSimCard(simId);
+        }
     }
 
     @Override
@@ -641,6 +644,7 @@
         }
         mIsDialpadShown = true;
         mDialpadFragment.setAnimate(animate);
+        mDialpadFragment.setSimCard(mCurrentSimCard);
 
         final FragmentTransaction ft = getFragmentManager().beginTransaction();
         ft.show(mDialpadFragment);
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);
     }
