diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f35fc0a..3759808 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -285,7 +285,7 @@
                  android:process="com.android.incallui"
                  android:permission="android.permission.BIND_INCALL_SERVICE" >
             <intent-filter>
-                <action android:name="android.telecomm.InCallService"/>
+                <action android:name="android.telecom.InCallService"/>
             </intent-filter>
         </service>
     </application>
diff --git a/res/xml/general_settings.xml b/res/xml/general_settings.xml
index 7410211..b1a78c1 100644
--- a/res/xml/general_settings.xml
+++ b/res/xml/general_settings.xml
@@ -73,8 +73,8 @@
 
             <intent
                 android:action="android.intent.action.MAIN"
-                android:targetPackage="com.android.telecomm"
-                android:targetClass="com.android.telecomm.RespondViaSmsSettings$Settings" />
+                android:targetPackage="com.android.server.telecom"
+                android:targetClass="com.android.server.telecom.RespondViaSmsSettings$Settings" />
 
         </PreferenceScreen>
 
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 4c8e3dc..32d61a2 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -16,7 +16,6 @@
 
 package com.android.dialer;
 
-import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
@@ -24,17 +23,14 @@
 import android.content.Intent;
 import android.content.res.Resources;
 import android.database.Cursor;
-import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.provider.CallLog;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.VoicemailContract;
 import android.provider.VoicemailContract.Voicemails;
-import android.telecomm.PhoneAccount;
-import android.telecomm.TelecommManager;
+import android.telecom.PhoneAccount;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
@@ -54,7 +50,6 @@
 import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
 import com.android.contacts.common.GeoUtil;
 import com.android.dialer.calllog.CallDetailHistoryAdapter;
-import com.android.dialer.calllog.CallLogQuery;
 import com.android.dialer.calllog.CallTypeHelper;
 import com.android.dialer.calllog.ContactInfo;
 import com.android.dialer.calllog.ContactInfoHelper;
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 00d5937..8c5b9c5 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -32,8 +32,8 @@
 import android.provider.ContactsContract.Intents;
 import android.speech.RecognizerIntent;
 import android.support.v4.view.ViewPager;
-import android.telecomm.PhoneAccount;
-import android.telecomm.TelecommManager;
+import android.telecom.PhoneAccount;
+import android.telecom.TelecomManager;
 import android.telephony.TelephonyManager;
 import android.text.Editable;
 import android.text.TextUtils;
@@ -92,7 +92,6 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Locale;
 
 /**
  * The dialer tab's title is 'phone', a more common name (see strings.xml).
@@ -774,7 +773,7 @@
         final boolean callKey = Intent.ACTION_CALL_BUTTON.equals(intent.getAction());
 
         if (callKey) {
-            getTelecommManager().showInCallScreen(false);
+            getTelecomManager().showInCallScreen(false);
             return true;
         }
 
@@ -918,7 +917,7 @@
 
     /** Returns an Intent to launch Call Settings screen */
     public static Intent getCallSettingsIntent() {
-        final Intent intent = new Intent(TelecommManager.ACTION_SHOW_CALL_SETTINGS);
+        final Intent intent = new Intent(TelecomManager.ACTION_SHOW_CALL_SETTINGS);
         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         return intent;
     }
@@ -995,7 +994,7 @@
     }
 
     private boolean phoneIsInUse() {
-        return getTelecommManager().isInCall();
+        return getTelecomManager().isInCall();
     }
 
     public static Intent getAddNumberToContactIntent(CharSequence text) {
@@ -1127,8 +1126,8 @@
         return (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
     }
 
-    private TelecommManager getTelecommManager() {
-        return (TelecommManager) getSystemService(Context.TELECOMM_SERVICE);
+    private TelecomManager getTelecomManager() {
+        return (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
     }
 
     @Override
diff --git a/src/com/android/dialer/SpecialCharSequenceMgr.java b/src/com/android/dialer/SpecialCharSequenceMgr.java
index 37c0383..14b26ec 100644
--- a/src/com/android/dialer/SpecialCharSequenceMgr.java
+++ b/src/com/android/dialer/SpecialCharSequenceMgr.java
@@ -28,7 +28,7 @@
 import android.net.Uri;
 import android.os.Looper;
 import android.provider.Settings;
-import android.telecomm.TelecommManager;
+import android.telecom.TelecomManager;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.TelephonyManager;
 import android.util.Log;
@@ -226,9 +226,9 @@
 
     static boolean handlePinEntry(Context context, String input) {
         if ((input.startsWith("**04") || input.startsWith("**05")) && input.endsWith("#")) {
-            TelecommManager telecommManager =
-                    (TelecommManager) context.getSystemService(Context.TELECOMM_SERVICE);
-            return telecommManager.handleMmi(input);
+            TelecomManager telecomManager =
+                    (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
+            return telecomManager.handleMmi(input);
         }
         return false;
     }
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index a90fc55..e727f7a 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -27,7 +27,7 @@
 import android.os.Message;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.PhoneLookup;
-import android.telecomm.PhoneAccountHandle;
+import android.telecom.PhoneAccountHandle;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
diff --git a/src/com/android/dialer/calllog/CallLogListItemViews.java b/src/com/android/dialer/calllog/CallLogListItemViews.java
index e95d7b0..dde4c91 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViews.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViews.java
@@ -17,7 +17,7 @@
 package com.android.dialer.calllog;
 
 import android.content.Context;
-import android.telecomm.PhoneAccountHandle;
+import android.telecom.PhoneAccountHandle;
 import android.view.View;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
diff --git a/src/com/android/dialer/calllog/CallLogNotificationsHelper.java b/src/com/android/dialer/calllog/CallLogNotificationsHelper.java
index db37d34..f6ee896 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.telecomm.TelecommManager;
+import android.telecom.TelecomManager;
 
 /**
  * Helper class operating on call log notifications.
@@ -26,9 +26,9 @@
 public class CallLogNotificationsHelper {
     /** Removes the missed call notifications. */
     public static void removeMissedCallNotifications(Context context) {
-        TelecommManager telecommManager = (TelecommManager)
-                context.getSystemService(Context.TELECOMM_SERVICE);
-        telecommManager.cancelMissedCallsNotification();
+        TelecomManager telecomManager = (TelecomManager)
+                context.getSystemService(Context.TELECOM_SERVICE);
+        telecomManager.cancelMissedCallsNotification();
     }
 
     /** Update the voice mail notifications. */
diff --git a/src/com/android/dialer/calllog/IntentProvider.java b/src/com/android/dialer/calllog/IntentProvider.java
index 11dd69f..874d4ca 100644
--- a/src/com/android/dialer/calllog/IntentProvider.java
+++ b/src/com/android/dialer/calllog/IntentProvider.java
@@ -21,7 +21,7 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.provider.CallLog.Calls;
-import android.telecomm.PhoneAccountHandle;
+import android.telecom.PhoneAccountHandle;
 
 import com.android.contacts.common.CallUtil;
 import com.android.dialer.CallDetailActivity;
diff --git a/src/com/android/dialer/calllog/PhoneAccountUtils.java b/src/com/android/dialer/calllog/PhoneAccountUtils.java
index f90ad0d..941ac4b 100644
--- a/src/com/android/dialer/calllog/PhoneAccountUtils.java
+++ b/src/com/android/dialer/calllog/PhoneAccountUtils.java
@@ -19,9 +19,9 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
-import android.telecomm.PhoneAccount;
-import android.telecomm.PhoneAccountHandle;
-import android.telecomm.TelecommManager;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
 import android.text.TextUtils;
 
 /**
@@ -68,10 +68,10 @@
      */
     private static PhoneAccount getAccountOrNull(Context context,
             PhoneAccountHandle phoneAccount) {
-        final TelecommManager telecommManager =
-                (TelecommManager) context.getSystemService(Context.TELECOMM_SERVICE);
-        final PhoneAccount account = telecommManager.getPhoneAccount(phoneAccount);
-        if (account == null || !telecommManager.hasMultipleEnabledAccounts()) {
+        final TelecomManager telecomManager =
+                (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
+        final PhoneAccount account = telecomManager.getPhoneAccount(phoneAccount);
+        if (account == null || !telecomManager.hasMultipleEnabledAccounts()) {
             return null;
         }
         return account;
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index ee1d634..9eb6884 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -37,8 +37,8 @@
 import android.provider.Contacts.Phones;
 import android.provider.Contacts.PhonesColumns;
 import android.provider.Settings;
-import android.telecomm.PhoneAccount;
-import android.telecomm.TelecommManager;
+import android.telecom.PhoneAccount;
+import android.telecom.TelecomManager;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.PhoneStateListener;
 import android.telephony.TelephonyManager;
@@ -61,7 +61,6 @@
 import android.widget.EditText;
 import android.widget.ImageButton;
 import android.widget.ImageView;
-import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.PopupMenu;
 import android.widget.RelativeLayout;
@@ -207,9 +206,9 @@
      * 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/TelecommManager call in the future.
+     * temporary measure. To be replaced with an Telephony/TelecomManager 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.
+     * in Phone app until this is replaced with the Telephony/Telecom API.
      */
     private static final String EXTRA_SEND_EMPTY_FLASH
             = "com.android.phone.extra.SEND_EMPTY_FLASH";
@@ -267,8 +266,8 @@
         return (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
     }
 
-    private TelecommManager getTelecommManager() {
-        return (TelecommManager) getActivity().getSystemService(Context.TELECOMM_SERVICE);
+    private TelecomManager getTelecomManager() {
+        return (TelecomManager) getActivity().getSystemService(Context.TELECOM_SERVICE);
     }
 
     @Override
@@ -1387,7 +1386,7 @@
      * or "return to call" from the dialpad chooser.
      */
     private void returnToInCallScreen(boolean showDialpad) {
-        getTelecommManager().showInCallScreen(showDialpad);
+        getTelecomManager().showInCallScreen(showDialpad);
 
         // Finally, finish() ourselves so that we don't stay on the
         // activity stack.
@@ -1405,7 +1404,7 @@
      *              is active (ie. off hook or ringing or dialing, or on hold).
      */
     public boolean isPhoneInUse() {
-        return getTelecommManager().isInCall();
+        return getTelecomManager().isInCall();
     }
 
     /**
diff --git a/src/com/android/dialer/util/DialerUtils.java b/src/com/android/dialer/util/DialerUtils.java
index ee19e3e..9cd4d99 100644
--- a/src/com/android/dialer/util/DialerUtils.java
+++ b/src/com/android/dialer/util/DialerUtils.java
@@ -27,7 +27,7 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.Telephony;
-import android.telecomm.TelecommManager;
+import android.telecom.TelecomManager;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
@@ -77,7 +77,7 @@
                 if (touchPoint.x != 0 || touchPoint.y != 0) {
                     Bundle extras = new Bundle();
                     extras.putParcelable(TouchPointManager.TOUCH_POINT, touchPoint);
-                    intent.putExtra(TelecommManager.EXTRA_OUTGOING_CALL_EXTRAS, extras);
+                    intent.putExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS, extras);
                 }
 
                 ((Activity) context).startActivityForResult(intent, 0);
diff --git a/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java b/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
index c6c969f..81585cc 100644
--- a/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
+++ b/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
@@ -31,8 +31,8 @@
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.provider.CallLog.Calls;
-import android.telecomm.PhoneAccountHandle;
-import android.telecomm.TelecommManager;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
 import android.text.format.DateFormat;
 import android.util.Log;
 import android.view.View;
@@ -398,8 +398,8 @@
     }
 
     private PhoneAccountHandle getManualAccount() {
-        TelecommManager telecommManager = TelecommManager.from(this);
-        List <PhoneAccountHandle> accountHandles = telecommManager.getEnabledPhoneAccounts();
+        TelecomManager telecomManager = TelecomManager.from(this);
+        List <PhoneAccountHandle> accountHandles = telecomManager.getEnabledPhoneAccounts();
         if (mAccount0.isChecked()) {
             return accountHandles.get(0);
         } else if (mAccount1.isChecked()){
