diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 7aeaed5..888f076 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -28,8 +28,9 @@
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableCollection;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Sets;
 
+import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.Set;
 
 /**
@@ -67,13 +68,20 @@
      * The main call repository. Keeps an instance of all live calls. New incoming and outgoing
      * calls are added to the map and removed when the calls move to the disconnected state.
      */
-    private final Set<Call> mCalls = Sets.newLinkedHashSet();
+    private final Set<Call> mCalls = new LinkedHashSet<>();
 
     /**
      * Set of new calls created to perform a handoff. The calls are added when handoff is initiated
      * and removed when hadnoff is complete.
      */
-    private final Set<Call> mPendingHandoffCalls = Sets.newLinkedHashSet();
+    private final Set<Call> mPendingHandoffCalls = new LinkedHashSet<>();
+
+
+    private final DtmfLocalTonePlayer mDtmfLocalTonePlayer = new DtmfLocalTonePlayer();
+    private final InCallController mInCallController = new InCallController();
+    private final CallAudioManager mCallAudioManager;
+    private final Ringer mRinger;
+    private final Set<CallsManagerListener> mListeners = new HashSet<>();
 
     /**
      * The call the user is currently interacting with. This is the call that should have audio
@@ -81,14 +89,6 @@
      */
     private Call mForegroundCall;
 
-    private final DtmfLocalTonePlayer mDtmfLocalTonePlayer = new DtmfLocalTonePlayer();
-
-    private final CallAudioManager mCallAudioManager;
-
-    private final Ringer mRinger;
-
-    private final Set<CallsManagerListener> mListeners = Sets.newHashSet();
-
     /** Singleton accessor. */
     static CallsManager getInstance() {
         return INSTANCE;
@@ -106,7 +106,7 @@
 
         mListeners.add(new CallLogManager(app));
         mListeners.add(new PhoneStateBroadcaster());
-        mListeners.add(new InCallController());
+        mListeners.add(mInCallController);
         mListeners.add(mRinger);
         mListeners.add(new RingbackPlayer(this, playerFactory));
         mListeners.add(new InCallToneMonitor(playerFactory, this));
@@ -170,6 +170,10 @@
         return mRinger;
     }
 
+    InCallController getInCallController() {
+        return mInCallController;
+    }
+
     boolean hasEmergencyCall() {
         for (Call call : mCalls) {
             if (call.isEmergencyCall()) {
diff --git a/src/com/android/telecomm/InCallController.java b/src/com/android/telecomm/InCallController.java
index 395e92e..4bba241 100644
--- a/src/com/android/telecomm/InCallController.java
+++ b/src/com/android/telecomm/InCallController.java
@@ -90,7 +90,7 @@
             mCallIdMapper.addCall(call);
             try {
                 mInCallService.addCall(toInCallCall(call));
-            } catch (RemoteException e) {
+            } catch (RemoteException ignored) {
             }
         }
     }
@@ -137,11 +137,22 @@
                     newAudioState);
             try {
                 mInCallService.onAudioStateChanged(newAudioState);
-            } catch (RemoteException e) {
+            } catch (RemoteException ignored) {
             }
         }
     }
 
+    void bringToForeground(boolean showDialpad) {
+        if (mInCallService != null) {
+            try {
+                mInCallService.bringToForeground(showDialpad);
+            } catch (RemoteException ignored) {
+            }
+        } else {
+            Log.w(this, "Asking to bring unbound in-call UI to foreground.");
+        }
+    }
+
     /**
      * Unbinds an existing bound connection to the in-call app.
      */
@@ -221,7 +232,7 @@
         if (mInCallService != null) {
             try {
                 mInCallService.updateCall(toInCallCall(call));
-            } catch (RemoteException e) {
+            } catch (RemoteException ignored) {
             }
         }
     }
diff --git a/src/com/android/telecomm/TelecommServiceImpl.java b/src/com/android/telecomm/TelecommServiceImpl.java
index beb046b..1b377b8 100644
--- a/src/com/android/telecomm/TelecommServiceImpl.java
+++ b/src/com/android/telecomm/TelecommServiceImpl.java
@@ -31,6 +31,7 @@
     private static final String SERVICE_NAME = "telecomm";
 
     private static final int MSG_SILENCE_RINGER = 1;
+    private static final int MSG_SHOW_CALL_SCREEN = 2;
 
     /** The singleton instance. */
     private static TelecommServiceImpl sInstance;
@@ -47,6 +48,9 @@
                 case MSG_SILENCE_RINGER:
                     silenceRingerInternal();
                     break;
+                case MSG_SHOW_CALL_SCREEN:
+                    showCallScreenInternal(msg.arg1 == 1);
+                    break;
             }
         }
     };
@@ -106,4 +110,13 @@
         TelecommApp.getInstance().enforceCallingOrSelfPermission(
                 android.Manifest.permission.MODIFY_PHONE_STATE, null);
     }
+
+    @Override
+    public void showCallScreen(boolean showDialpad) {
+        mHandler.obtainMessage(MSG_SHOW_CALL_SCREEN, showDialpad ? 1 : 0, 0).sendToTarget();
+    }
+
+    private void showCallScreenInternal(boolean showDialpad) {
+        CallsManager.getInstance().getInCallController().bringToForeground(showDialpad);
+    }
 }
