diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 36f7b8d..6991be6 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -31,7 +31,6 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.RemoteException;
-import android.phone.PhoneManager;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Intents;
 import android.speech.RecognizerIntent;
@@ -789,7 +788,7 @@
         final boolean callKey = Intent.ACTION_CALL_BUTTON.equals(intent.getAction());
 
         if (callKey) {
-            getPhoneManager().showCallScreen(false);
+            getTelecommManager().showInCallScreen(false);
             return true;
         }
 
@@ -1015,7 +1014,7 @@
     }
 
     private boolean phoneIsInUse() {
-        return getPhoneManager().isInAPhoneCall();
+        return getTelecommManager().isInCall();
     }
 
     public static Intent getAddNumberToContactIntent(CharSequence text) {
@@ -1147,8 +1146,8 @@
         return (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
     }
 
-    private PhoneManager getPhoneManager() {
-        return (PhoneManager) getSystemService(Context.PHONE_SERVICE);
+    private TelecommManager getTelecommManager() {
+        return (TelecommManager) getSystemService(Context.TELECOMM_SERVICE);
     }
 
     @Override
diff --git a/src/com/android/dialer/SpecialCharSequenceMgr.java b/src/com/android/dialer/SpecialCharSequenceMgr.java
index 4a6e4b2..0b6e881 100644
--- a/src/com/android/dialer/SpecialCharSequenceMgr.java
+++ b/src/com/android/dialer/SpecialCharSequenceMgr.java
@@ -27,8 +27,8 @@
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Looper;
-import android.phone.PhoneManager;
 import android.provider.Settings;
+import android.telecomm.TelecommManager;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.TelephonyManager;
 import android.util.Log;
@@ -225,9 +225,9 @@
 
     static boolean handlePinEntry(Context context, String input) {
         if ((input.startsWith("**04") || input.startsWith("**05")) && input.endsWith("#")) {
-            PhoneManager phoneManager =
-                    (PhoneManager) context.getSystemService(Context.PHONE_SERVICE);
-            return phoneManager.handlePinMmi(input);
+            TelecommManager telecommManager =
+                    (TelecommManager) context.getSystemService(Context.TELECOMM_SERVICE);
+            return telecommManager.handleMmi(input);
         }
         return false;
     }
diff --git a/src/com/android/dialer/calllog/CallLogNotificationsHelper.java b/src/com/android/dialer/calllog/CallLogNotificationsHelper.java
index 2b4ae50..db37d34 100644
--- a/src/com/android/dialer/calllog/CallLogNotificationsHelper.java
+++ b/src/com/android/dialer/calllog/CallLogNotificationsHelper.java
@@ -18,7 +18,7 @@
 
 import android.content.Context;
 import android.content.Intent;
-import android.phone.PhoneManager;
+import android.telecomm.TelecommManager;
 
 /**
  * Helper class operating on call log notifications.
@@ -26,8 +26,9 @@
 public class CallLogNotificationsHelper {
     /** Removes the missed call notifications. */
     public static void removeMissedCallNotifications(Context context) {
-        PhoneManager phoneManager = (PhoneManager) context.getSystemService(Context.PHONE_SERVICE);
-        phoneManager.cancelMissedCallsNotification();
+        TelecommManager telecommManager = (TelecommManager)
+                context.getSystemService(Context.TELECOMM_SERVICE);
+        telecommManager.cancelMissedCallsNotification();
     }
 
     /** Update the voice mail notifications. */
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 84f1c64..141a451 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -33,11 +33,11 @@
 import android.media.ToneGenerator;
 import android.net.Uri;
 import android.os.Bundle;
-import android.phone.PhoneManager;
 import android.provider.Contacts.People;
 import android.provider.Contacts.Phones;
 import android.provider.Contacts.PhonesColumns;
 import android.provider.Settings;
+import android.telecomm.TelecommManager;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.PhoneStateListener;
 import android.telephony.TelephonyManager;
@@ -213,7 +213,7 @@
      * press/depress of the "hookswitch" of a landline phone. Aka "empty flash".
      *
      * TODO: Using an intent extra to tell the phone to send this flash is a
-     * temporary measure. To be replaced with an Telephony/PhoneManager call in the future.
+     * temporary measure. To be replaced with an Telephony/TelecommManager call in the future.
      * TODO: Keep in sync with the string defined in OutgoingCallBroadcaster.java
      * in Phone app until this is replaced with the Telephony/Telecomm API.
      */
@@ -273,8 +273,8 @@
         return (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
     }
 
-    private PhoneManager getPhoneManager() {
-        return (PhoneManager) getActivity().getSystemService(Context.PHONE_SERVICE);
+    private TelecommManager getTelecommManager() {
+        return (TelecommManager) getActivity().getSystemService(Context.TELECOMM_SERVICE);
     }
 
     @Override
@@ -1384,7 +1384,7 @@
      * or "return to call" from the dialpad chooser.
      */
     private void returnToInCallScreen(boolean showDialpad) {
-        getPhoneManager().showCallScreen(showDialpad);
+        getTelecommManager().showInCallScreen(showDialpad);
 
         // Finally, finish() ourselves so that we don't stay on the
         // activity stack.
@@ -1402,7 +1402,7 @@
      *              is active (ie. off hook or ringing or dialing, or on hold).
      */
     public boolean isPhoneInUse() {
-        return getPhoneManager().isInAPhoneCall();
+        return getTelecommManager().isInCall();
     }
 
     /**
