diff --git a/src/com/android/telecomm/AsyncResultCallback.java b/src/com/android/server/telecom/AsyncResultCallback.java
similarity index 95%
rename from src/com/android/telecomm/AsyncResultCallback.java
rename to src/com/android/server/telecom/AsyncResultCallback.java
index b6e0de5..edbda3b 100644
--- a/src/com/android/telecomm/AsyncResultCallback.java
+++ b/src/com/android/server/telecom/AsyncResultCallback.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 /**
  * Generic result interface for use with async method callback.
diff --git a/src/com/android/telecomm/AsyncRingtonePlayer.java b/src/com/android/server/telecom/AsyncRingtonePlayer.java
similarity index 97%
rename from src/com/android/telecomm/AsyncRingtonePlayer.java
rename to src/com/android/server/telecom/AsyncRingtonePlayer.java
index 7bec55f..ad57b00 100644
--- a/src/com/android/telecomm/AsyncRingtonePlayer.java
+++ b/src/com/android/server/telecom/AsyncRingtonePlayer.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.media.AudioManager;
 import android.media.Ringtone;
@@ -154,7 +154,7 @@
             ringtoneUri = Settings.System.DEFAULT_RINGTONE_URI;
         }
 
-        Ringtone ringtone = RingtoneManager.getRingtone(TelecommApp.getInstance(), ringtoneUri);
+        Ringtone ringtone = RingtoneManager.getRingtone(TelecomApp.getInstance(), ringtoneUri);
         ringtone.setStreamType(AudioManager.STREAM_RING);
         return ringtone;
     }
diff --git a/src/com/android/telecomm/BluetoothManager.java b/src/com/android/server/telecom/BluetoothManager.java
similarity index 99%
rename from src/com/android/telecomm/BluetoothManager.java
rename to src/com/android/server/telecom/BluetoothManager.java
index 25adbf5..9b5fd26 100644
--- a/src/com/android/telecomm/BluetoothManager.java
+++ b/src/com/android/server/telecom/BluetoothManager.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
@@ -26,7 +26,6 @@
 import android.content.IntentFilter;
 import android.os.SystemClock;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
diff --git a/src/com/android/telecomm/Call.java b/src/com/android/server/telecom/Call.java
similarity index 96%
rename from src/com/android/telecomm/Call.java
rename to src/com/android/server/telecom/Call.java
index 79b754a..6f7177b 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -14,37 +14,35 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
-import android.app.PendingIntent;
-import android.content.ContentUris;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.provider.ContactsContract.Contacts;
-import android.telecomm.CallState;
-import android.telecomm.Connection;
-import android.telecomm.GatewayInfo;
-import android.telecomm.ParcelableConnection;
-import android.telecomm.PhoneAccount;
-import android.telecomm.PhoneAccountHandle;
-import android.telecomm.PhoneCapabilities;
-import android.telecomm.Response;
-import android.telecomm.StatusHints;
-import android.telecomm.TelecommManager;
-import android.telecomm.VideoProfile;
+import android.telecom.CallState;
+import android.telecom.Connection;
+import android.telecom.GatewayInfo;
+import android.telecom.ParcelableConnection;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.PhoneCapabilities;
+import android.telecom.Response;
+import android.telecom.StatusHints;
+import android.telecom.TelecomManager;
+import android.telecom.VideoProfile;
 import android.telephony.DisconnectCause;
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 
-import com.android.internal.telecomm.IVideoProvider;
+import com.android.internal.telecom.IVideoProvider;
 import com.android.internal.telephony.CallerInfo;
 import com.android.internal.telephony.CallerInfoAsyncQuery;
 import com.android.internal.telephony.CallerInfoAsyncQuery.OnQueryCompleteListener;
 import com.android.internal.telephony.SmsApplication;
-import com.android.telecomm.ContactsAsyncHelper.OnImageLoadCompleteListener;
+import com.android.server.telecom.ContactsAsyncHelper.OnImageLoadCompleteListener;
 
 import com.google.common.base.Preconditions;
 
@@ -59,7 +57,7 @@
 
 /**
  *  Encapsulates all aspects of a given phone call throughout its lifecycle, starting
- *  from the time the call intent was received by Telecomm (vs. the time the call was
+ *  from the time the call intent was received by Telecom (vs. the time the call was
  *  connected etc).
  */
 final class Call implements CreateConnectionResponse {
@@ -199,7 +197,7 @@
     private Uri mHandle;
 
     /**
-     * The presentation requirements for the handle. See {@link TelecommManager} for valid values.
+     * The presentation requirements for the handle. See {@link TelecomManager} for valid values.
      */
     private int mHandlePresentation;
 
@@ -207,7 +205,7 @@
     private String mCallerDisplayName;
 
     /**
-     * The presentation requirements for the handle. See {@link TelecommManager} for valid values.
+     * The presentation requirements for the handle. See {@link TelecomManager} for valid values.
      */
     private int mCallerDisplayNamePresentation;
 
@@ -259,7 +257,7 @@
     /** The latest token used with a contact info query. */
     private int mQueryToken = 0;
 
-    /** Whether this call is requesting that Telecomm play the ringback tone on its behalf. */
+    /** Whether this call is requesting that Telecom play the ringback tone on its behalf. */
     private boolean mRingbackRequested = false;
 
     /** Whether direct-to-voicemail query is pending. */
@@ -308,7 +306,7 @@
         mState = isConference ? CallState.ACTIVE : CallState.NEW;
         mRepository = repository;
         setHandle(handle);
-        setHandle(handle, TelecommManager.PRESENTATION_ALLOWED);
+        setHandle(handle, TelecomManager.PRESENTATION_ALLOWED);
         mGatewayInfo = gatewayInfo;
         mConnectionManagerPhoneAccountHandle = connectionManagerPhoneAccountHandle;
         mTargetPhoneAccountHandle = targetPhoneAccountHandle;
@@ -386,7 +384,7 @@
 
 
     void setHandle(Uri handle) {
-        setHandle(handle, TelecommManager.PRESENTATION_ALLOWED);
+        setHandle(handle, TelecomManager.PRESENTATION_ALLOWED);
     }
 
     void setHandle(Uri handle, int presentation) {
@@ -394,7 +392,7 @@
             mHandle = handle;
             mHandlePresentation = presentation;
             mIsEmergencyCall = mHandle != null && PhoneNumberUtils.isLocalEmergencyNumber(
-                    TelecommApp.getInstance(), mHandle.getSchemeSpecificPart());
+                    TelecomApp.getInstance(), mHandle.getSchemeSpecificPart());
             startCallerInfoLookup();
             for (Listener l : mListeners) {
                 l.onHandleChanged(this);
@@ -744,7 +742,7 @@
         Preconditions.checkNotNull(mConnectionService);
 
         // Check to verify that the call is still in the ringing state. A call can change states
-        // between the time the user hits 'answer' and Telecomm receives the command.
+        // between the time the user hits 'answer' and Telecom receives the command.
         if (isRinging("answer")) {
             // At this point, we are asking the connection service to answer but we don't assume
             // that it will work. Instead, we wait until confirmation from the connectino service
@@ -970,7 +968,7 @@
         }
 
         // Is there a valid SMS application on the phone?
-        if (SmsApplication.getDefaultRespondViaMessageApplication(TelecommApp.getInstance(),
+        if (SmsApplication.getDefaultRespondViaMessageApplication(TelecomApp.getInstance(),
                 true /*updateIfNeeded*/) == null) {
             return false;
         }
@@ -992,7 +990,7 @@
     /**
      * We need to make sure that before we move a call to the disconnected state, it no
      * longer has any parent/child relationships.  We want to do this to ensure that the InCall
-     * Service always has the right data in the right order.  We also want to do it in telecomm so
+     * Service always has the right data in the right order.  We also want to do it in telecom so
      * that the insurance policy lives in the framework side of things.
      */
     private void fixParentAfterDisconnect() {
@@ -1030,7 +1028,7 @@
             Log.v(this, "Looking up information for: %s.", Log.piiHandle(number));
             CallerInfoAsyncQuery.startQuery(
                     mQueryToken,
-                    TelecommApp.getInstance(),
+                    TelecomApp.getInstance(),
                     number,
                     sCallerInfoQueryListener,
                     this);
@@ -1056,7 +1054,7 @@
                         mCallerInfo.contactDisplayPhotoUri, this);
                 ContactsAsyncHelper.startObtainPhotoAsync(
                         token,
-                        TelecommApp.getInstance(),
+                        TelecomApp.getInstance(),
                         mCallerInfo.contactDisplayPhotoUri,
                         sPhotoLoadListener,
                         this);
diff --git a/src/com/android/telecomm/CallActivity.java b/src/com/android/server/telecom/CallActivity.java
similarity index 89%
rename from src/com/android/telecomm/CallActivity.java
rename to src/com/android/server/telecom/CallActivity.java
index 72437a2..96ffb96 100644
--- a/src/com/android/telecomm/CallActivity.java
+++ b/src/com/android/server/telecom/CallActivity.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.app.Activity;
 import android.content.ComponentName;
@@ -24,9 +24,9 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.UserManager;
-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.telephony.DisconnectCause;
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
@@ -42,7 +42,7 @@
  * In L, any app that has the CALL_PRIVILEGED permission can continue to make outgoing emergency
  * calls via ACTION_CALL_PRIVILEGED.
  *
- * In addition, the default dialer (identified via {@link TelecommManager#getDefaultPhoneApp()}
+ * In addition, the default dialer (identified via {@link android.telecom.TelecomManager#getDefaultPhoneApp()}
  * will also be granted the ability to make emergency outgoing calls using the CALL action. In
  * order to do this, it must call startActivityForResult on the CALL intent to allow its package
  * name to be passed to {@link CallActivity}. Calling startActivity will continue to work on all
@@ -109,7 +109,7 @@
                 Intent.ACTION_CALL_PRIVILEGED.equals(action) ||
                 Intent.ACTION_CALL_EMERGENCY.equals(action)) {
             processOutgoingCallIntent(intent);
-        } else if (TelecommManager.ACTION_INCOMING_CALL.equals(action)) {
+        } else if (TelecomManager.ACTION_INCOMING_CALL.equals(action)) {
             processIncomingCallIntent(intent);
         }
     }
@@ -142,11 +142,11 @@
         }
 
         PhoneAccountHandle phoneAccountHandle = intent.getParcelableExtra(
-                TelecommManager.EXTRA_PHONE_ACCOUNT_HANDLE);
+                TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE);
 
         Bundle clientExtras = null;
-        if (intent.hasExtra(TelecommManager.EXTRA_OUTGOING_CALL_EXTRAS)) {
-            clientExtras = intent.getBundleExtra(TelecommManager.EXTRA_OUTGOING_CALL_EXTRAS);
+        if (intent.hasExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS)) {
+            clientExtras = intent.getBundleExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS);
         }
         if (clientExtras == null) {
             clientExtras = Bundle.EMPTY;
@@ -178,7 +178,7 @@
      */
     private void processIncomingCallIntent(Intent intent) {
         PhoneAccountHandle phoneAccountHandle = intent.getParcelableExtra(
-                TelecommManager.EXTRA_PHONE_ACCOUNT_HANDLE);
+                TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE);
         if (phoneAccountHandle == null) {
             Log.w(this, "Rejecting incoming call due to null phone account");
             return;
@@ -189,8 +189,8 @@
         }
 
         Bundle clientExtras = null;
-        if (intent.hasExtra(TelecommManager.EXTRA_INCOMING_CALL_EXTRAS)) {
-            clientExtras = intent.getBundleExtra(TelecommManager.EXTRA_INCOMING_CALL_EXTRAS);
+        if (intent.hasExtra(TelecomManager.EXTRA_INCOMING_CALL_EXTRAS)) {
+            clientExtras = intent.getBundleExtra(TelecomManager.EXTRA_INCOMING_CALL_EXTRAS);
         }
         if (clientExtras == null) {
             clientExtras = Bundle.EMPTY;
@@ -207,9 +207,9 @@
             return false;
         }
 
-        final TelecommManager telecommManager =
-                (TelecommManager) getSystemService(Context.TELECOMM_SERVICE);
-        final ComponentName defaultPhoneApp = telecommManager.getDefaultPhoneApp();
+        final TelecomManager telecomManager =
+                (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
+        final ComponentName defaultPhoneApp = telecomManager.getDefaultPhoneApp();
         return (defaultPhoneApp != null
                 && TextUtils.equals(defaultPhoneApp.getPackageName(), packageName));
     }
diff --git a/src/com/android/telecomm/CallAudioManager.java b/src/com/android/server/telecom/CallAudioManager.java
similarity index 99%
rename from src/com/android/telecomm/CallAudioManager.java
rename to src/com/android/server/telecom/CallAudioManager.java
index 84862b8..312f58f 100644
--- a/src/com/android/telecomm/CallAudioManager.java
+++ b/src/com/android/server/telecom/CallAudioManager.java
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.Context;
 import android.media.AudioManager;
-import android.telecomm.AudioState;
-import android.telecomm.CallState;
+import android.telecom.AudioState;
+import android.telecom.CallState;
 
 import com.google.common.base.Preconditions;
 
diff --git a/src/com/android/telecomm/CallIdMapper.java b/src/com/android/server/telecom/CallIdMapper.java
similarity index 98%
rename from src/com/android/telecomm/CallIdMapper.java
rename to src/com/android/server/telecom/CallIdMapper.java
index b82d1e1..40a50a5 100644
--- a/src/com/android/telecomm/CallIdMapper.java
+++ b/src/com/android/server/telecom/CallIdMapper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import com.google.common.collect.HashBiMap;
 
diff --git a/src/com/android/telecomm/CallLogManager.java b/src/com/android/server/telecom/CallLogManager.java
similarity index 98%
rename from src/com/android/telecomm/CallLogManager.java
rename to src/com/android/server/telecom/CallLogManager.java
index eedc5f5..a29ef54 100644
--- a/src/com/android/telecomm/CallLogManager.java
+++ b/src/com/android/server/telecom/CallLogManager.java
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.Context;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.provider.CallLog.Calls;
-import android.telecomm.CallState;
-import android.telecomm.PhoneAccountHandle;
-import android.telecomm.VideoProfile;
+import android.telecom.CallState;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.VideoProfile;
 import android.telephony.DisconnectCause;
 import android.telephony.PhoneNumberUtils;
 
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
similarity index 95%
rename from src/com/android/telecomm/CallsManager.java
rename to src/com/android/server/telecom/CallsManager.java
index 5d77a6d..d0aa49f 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.net.Uri;
 import android.os.Bundle;
-import android.telecomm.AudioState;
-import android.telecomm.CallState;
-import android.telecomm.GatewayInfo;
-import android.telecomm.ParcelableConference;
-import android.telecomm.PhoneAccountHandle;
+import android.telecom.AudioState;
+import android.telecom.CallState;
+import android.telecom.GatewayInfo;
+import android.telecom.ParcelableConference;
+import android.telecom.PhoneAccountHandle;
 import android.telephony.DisconnectCause;
 import android.telephony.TelephonyManager;
 
@@ -39,7 +39,7 @@
  *
  * NOTE: by design most APIs are package private, use the relevant adapter/s to allow
  * access from other packages specifically refraining from passing the CallsManager instance
- * beyond the com.android.telecomm package boundary.
+ * beyond the com.android.server.telecom package boundary.
  */
 public final class CallsManager extends Call.ListenerBase {
 
@@ -102,10 +102,10 @@
     }
 
     /**
-     * Initializes the required Telecomm components.
+     * Initializes the required Telecom components.
      */
     private CallsManager() {
-        TelecommApp app = TelecommApp.getInstance();
+        TelecomApp app = TelecomApp.getInstance();
 
         StatusBarNotifier statusBarNotifier = new StatusBarNotifier(app, this);
         mWiredHeadsetManager = new WiredHeadsetManager(app);
@@ -292,7 +292,7 @@
             return null;
         }
 
-        TelecommApp app = TelecommApp.getInstance();
+        TelecomApp app = TelecomApp.getInstance();
 
         // Only dial with the requested phoneAccount if it is still valid. Otherwise treat this call
         // as if a phoneAccount was not specified (does the default behavior instead).
@@ -376,7 +376,7 @@
         call.setStartWithSpeakerphoneOn(speakerphoneOn);
         call.setVideoState(videoState);
 
-        TelecommApp app = TelecommApp.getInstance();
+        TelecomApp app = TelecomApp.getInstance();
         final boolean emergencyCall = TelephonyUtil.shouldProcessAsEmergency(app, call.getHandle());
         if (emergencyCall) {
             // Emergency -- CreateConnectionProcessor will choose accounts automatically
@@ -401,8 +401,8 @@
     }
 
     /**
-     * Instructs Telecomm to answer the specified call. Intended to be invoked by the in-call
-     * app through {@link InCallAdapter} after Telecomm notifies it of an incoming call followed by
+     * Instructs Telecom to answer the specified call. Intended to be invoked by the in-call
+     * app through {@link InCallAdapter} after Telecom notifies it of an incoming call followed by
      * the user opting to answer said call.
      *
      * @param call The call to answer.
@@ -436,8 +436,8 @@
     }
 
     /**
-     * Instructs Telecomm to reject the specified call. Intended to be invoked by the in-call
-     * app through {@link InCallAdapter} after Telecomm notifies it of an incoming call followed by
+     * Instructs Telecom to reject the specified call. Intended to be invoked by the in-call
+     * app through {@link InCallAdapter} after Telecom notifies it of an incoming call followed by
      * the user opting to reject said call.
      */
     void rejectCall(Call call, boolean rejectWithMessage, String textMessage) {
@@ -452,7 +452,7 @@
     }
 
     /**
-     * Instructs Telecomm to play the specified DTMF tone within the specified call.
+     * Instructs Telecom to play the specified DTMF tone within the specified call.
      *
      * @param digit The DTMF digit to play.
      */
@@ -466,7 +466,7 @@
     }
 
     /**
-     * Instructs Telecomm to stop the currently playing DTMF tone, if any.
+     * Instructs Telecom to stop the currently playing DTMF tone, if any.
      */
     void stopDtmfTone(Call call) {
         if (!mCalls.contains(call)) {
@@ -478,7 +478,7 @@
     }
 
     /**
-     * Instructs Telecomm to continue (or not) the current post-dial DTMF string, if any.
+     * Instructs Telecom to continue (or not) the current post-dial DTMF string, if any.
      */
     void postDialContinue(Call call, boolean proceed) {
         if (!mCalls.contains(call)) {
@@ -489,7 +489,7 @@
     }
 
     /**
-     * Instructs Telecomm to disconnect the specified call. Intended to be invoked by the
+     * Instructs Telecom to disconnect the specified call. Intended to be invoked by the
      * in-call app through {@link InCallAdapter} for an ongoing call. This is usually triggered by
      * the user hitting the end-call button.
      */
@@ -504,7 +504,7 @@
     }
 
     /**
-     * Instructs Telecomm to disconnect all calls.
+     * Instructs Telecom to disconnect all calls.
      */
     void disconnectAllCalls() {
         Log.v(this, "disconnectAllCalls");
@@ -516,7 +516,7 @@
 
 
     /**
-     * Instructs Telecomm to put the specified call on hold. Intended to be invoked by the
+     * Instructs Telecom to put the specified call on hold. Intended to be invoked by the
      * in-call app through {@link InCallAdapter} for an ongoing call. This is usually triggered by
      * the user hitting the hold button during an active call.
      */
@@ -530,7 +530,7 @@
     }
 
     /**
-     * Instructs Telecomm to release the specified call from hold. Intended to be invoked by
+     * Instructs Telecom to release the specified call from hold. Intended to be invoked by
      * the in-call app through {@link InCallAdapter} for an ongoing call. This is usually triggered
      * by the user hitting the hold button during a held call.
      */
diff --git a/src/com/android/telecomm/CallsManagerListenerBase.java b/src/com/android/server/telecom/CallsManagerListenerBase.java
similarity index 94%
rename from src/com/android/telecomm/CallsManagerListenerBase.java
rename to src/com/android/server/telecom/CallsManagerListenerBase.java
index 8437e29..93b2a24 100644
--- a/src/com/android/telecomm/CallsManagerListenerBase.java
+++ b/src/com/android/server/telecom/CallsManagerListenerBase.java
@@ -14,10 +14,9 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
-import android.telecomm.AudioState;
-import android.telecomm.CallState;
+import android.telecom.AudioState;
 
 /**
  * Provides a default implementation for listeners of CallsManager.
diff --git a/src/com/android/telecomm/ConnectionServiceRepository.java b/src/com/android/server/telecom/ConnectionServiceRepository.java
similarity index 82%
rename from src/com/android/telecomm/ConnectionServiceRepository.java
rename to src/com/android/server/telecom/ConnectionServiceRepository.java
index efd1ba4..d7a6d3e 100644
--- a/src/com/android/telecomm/ConnectionServiceRepository.java
+++ b/src/com/android/server/telecom/ConnectionServiceRepository.java
@@ -14,17 +14,10 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.ComponentName;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
-import android.telecomm.ConnectionService;
 
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 
 /**
@@ -44,7 +37,7 @@
             service = new ConnectionServiceWrapper(
                     componentName,
                     this,
-                    TelecommApp.getInstance().getPhoneAccountRegistrar());
+                    TelecomApp.getInstance().getPhoneAccountRegistrar());
             service.addListener(this);
             mServiceCache.put(componentName, service);
         }
diff --git a/src/com/android/telecomm/ConnectionServiceWrapper.java b/src/com/android/server/telecom/ConnectionServiceWrapper.java
similarity index 97%
rename from src/com/android/telecomm/ConnectionServiceWrapper.java
rename to src/com/android/server/telecom/ConnectionServiceWrapper.java
index 5c678ff..669f9a5 100644
--- a/src/com/android/telecomm/ConnectionServiceWrapper.java
+++ b/src/com/android/server/telecom/ConnectionServiceWrapper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.ComponentName;
 import android.net.Uri;
@@ -23,25 +23,25 @@
 import android.os.IBinder;
 import android.os.Message;
 import android.os.RemoteException;
-import android.telecomm.AudioState;
-import android.telecomm.Connection;
-import android.telecomm.ConnectionRequest;
-import android.telecomm.ConnectionService;
-import android.telecomm.GatewayInfo;
-import android.telecomm.ParcelableConference;
-import android.telecomm.ParcelableConnection;
-import android.telecomm.PhoneAccount;
-import android.telecomm.PhoneAccountHandle;
-import android.telecomm.StatusHints;
-import android.telecomm.TelecommManager;
-import android.telecomm.VideoProfile;
+import android.telecom.AudioState;
+import android.telecom.Connection;
+import android.telecom.ConnectionRequest;
+import android.telecom.ConnectionService;
+import android.telecom.GatewayInfo;
+import android.telecom.ParcelableConference;
+import android.telecom.ParcelableConnection;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.StatusHints;
+import android.telecom.TelecomManager;
+import android.telecom.VideoProfile;
 import android.telephony.DisconnectCause;
 
 import com.android.internal.os.SomeArgs;
-import com.android.internal.telecomm.IConnectionService;
-import com.android.internal.telecomm.IConnectionServiceAdapter;
-import com.android.internal.telecomm.IVideoProvider;
-import com.android.internal.telecomm.RemoteServiceCallback;
+import com.android.internal.telecom.IConnectionService;
+import com.android.internal.telecom.IConnectionServiceAdapter;
+import com.android.internal.telecom.IVideoProvider;
+import com.android.internal.telecom.RemoteServiceCallback;
 import com.google.common.base.Preconditions;
 
 import java.util.ArrayList;
@@ -612,10 +612,10 @@
                         gatewayInfo.getOriginalAddress() != null) {
                     extras = (Bundle) extras.clone();
                     extras.putString(
-                            TelecommManager.GATEWAY_PROVIDER_PACKAGE,
+                            TelecomManager.GATEWAY_PROVIDER_PACKAGE,
                             gatewayInfo.getGatewayProviderPackageName());
                     extras.putParcelable(
-                            TelecommManager.GATEWAY_ORIGINAL_ADDRESS,
+                            TelecomManager.GATEWAY_ORIGINAL_ADDRESS,
                             gatewayInfo.getOriginalAddress());
                 }
 
@@ -908,15 +908,15 @@
     }
 
     private void logIncoming(String msg, Object... params) {
-        Log.d(this, "ConnectionService -> Telecomm: " + msg, params);
+        Log.d(this, "ConnectionService -> Telecom: " + msg, params);
     }
 
     private void logOutgoing(String msg, Object... params) {
-        Log.d(this, "Telecomm -> ConnectionService: " + msg, params);
+        Log.d(this, "Telecom -> ConnectionService: " + msg, params);
     }
 
     private void queryRemoteConnectionServices(final RemoteServiceCallback callback) {
-        PhoneAccountRegistrar registrar = TelecommApp.getInstance().getPhoneAccountRegistrar();
+        PhoneAccountRegistrar registrar = TelecomApp.getInstance().getPhoneAccountRegistrar();
 
         // Only give remote connection services to this connection service if it is listed as
         // the connection manager.
diff --git a/src/com/android/telecomm/Constants.java b/src/com/android/server/telecom/Constants.java
similarity index 96%
rename from src/com/android/telecomm/Constants.java
rename to src/com/android/server/telecom/Constants.java
index 656114f..bc6e350 100644
--- a/src/com/android/telecomm/Constants.java
+++ b/src/com/android/server/telecom/Constants.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 /**
  * App-wide constants for the phone app.
diff --git a/src/com/android/telecomm/ContactsAsyncHelper.java b/src/com/android/server/telecom/ContactsAsyncHelper.java
similarity index 98%
rename from src/com/android/telecomm/ContactsAsyncHelper.java
rename to src/com/android/server/telecom/ContactsAsyncHelper.java
index da0aa03..aa99ac3 100644
--- a/src/com/android/telecomm/ContactsAsyncHelper.java
+++ b/src/com/android/server/telecom/ContactsAsyncHelper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.app.Notification;
 import android.content.Context;
@@ -26,7 +26,6 @@
 import android.os.HandlerThread;
 import android.os.Looper;
 import android.os.Message;
-import android.provider.ContactsContract.Contacts;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/src/com/android/telecomm/CreateConnectionProcessor.java b/src/com/android/server/telecom/CreateConnectionProcessor.java
similarity index 92%
rename from src/com/android/telecomm/CreateConnectionProcessor.java
rename to src/com/android/server/telecom/CreateConnectionProcessor.java
index 023f43e..e4c5463 100644
--- a/src/com/android/telecomm/CreateConnectionProcessor.java
+++ b/src/com/android/server/telecom/CreateConnectionProcessor.java
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.Context;
-import android.telecomm.ParcelableConnection;
-import android.telecomm.PhoneAccount;
-import android.telecomm.PhoneAccountHandle;
+import android.telecom.ParcelableConnection;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
 import android.telephony.DisconnectCause;
 
 import java.util.ArrayList;
@@ -126,7 +126,7 @@
 
     private void attemptNextPhoneAccount() {
         Log.v(this, "attemptNextPhoneAccount");
-        PhoneAccountRegistrar registrar = TelecommApp.getInstance().getPhoneAccountRegistrar();
+        PhoneAccountRegistrar registrar = TelecomApp.getInstance().getPhoneAccountRegistrar();
         CallAttemptRecord attempt = null;
         if (mAttemptRecordIterator.hasNext()) {
             attempt = mAttemptRecordIterator.next();
@@ -177,7 +177,7 @@
     }
 
     private boolean shouldSetConnectionManager() {
-        Context context = TelecommApp.getInstance();
+        Context context = TelecomApp.getInstance();
         if (!context.getResources().getBoolean(R.bool.connection_manager_enabled)) {
             // Connection Manager support has been turned off, disregard.
             return false;
@@ -193,7 +193,7 @@
             return false;
         }
 
-        PhoneAccountRegistrar registrar = TelecommApp.getInstance().getPhoneAccountRegistrar();
+        PhoneAccountRegistrar registrar = TelecomApp.getInstance().getPhoneAccountRegistrar();
         PhoneAccountHandle connectionManager = registrar.getSimCallManager();
         if (connectionManager == null) {
             return false;
@@ -219,7 +219,7 @@
     private void adjustAttemptsForConnectionManager() {
         if (shouldSetConnectionManager()) {
             CallAttemptRecord record = new CallAttemptRecord(
-                    TelecommApp.getInstance().getPhoneAccountRegistrar().getSimCallManager(),
+                    TelecomApp.getInstance().getPhoneAccountRegistrar().getSimCallManager(),
                     mAttemptRecords.get(0).targetPhoneAccount);
             Log.v(this, "setConnectionManager, changing %s -> %s",
                     mAttemptRecords.get(0).targetPhoneAccount, record);
@@ -232,10 +232,10 @@
     // If we are possibly attempting to call a local emergency number, ensure that the
     // plain PSTN connection services are listed, and nothing else.
     private void adjustAttemptsForEmergency()  {
-        if (TelephonyUtil.shouldProcessAsEmergency(TelecommApp.getInstance(), mCall.getHandle())) {
+        if (TelephonyUtil.shouldProcessAsEmergency(TelecomApp.getInstance(), mCall.getHandle())) {
             Log.i(this, "Emergency number detected");
             mAttemptRecords.clear();
-            List<PhoneAccount> allAccounts = TelecommApp.getInstance()
+            List<PhoneAccount> allAccounts = TelecomApp.getInstance()
                     .getPhoneAccountRegistrar().getAllPhoneAccounts();
             // First, add SIM phone accounts which can place emergency calls.
             for (PhoneAccount phoneAccount : allAccounts) {
@@ -251,14 +251,14 @@
             }
 
             // Next, add the connection manager account as a backup if it can place emergency calls.
-            PhoneAccountHandle callManagerHandle = TelecommApp.getInstance()
+            PhoneAccountHandle callManagerHandle = TelecomApp.getInstance()
                     .getPhoneAccountRegistrar().getSimCallManager();
             if (callManagerHandle != null) {
-                PhoneAccount callManager = TelecommApp.getInstance()
+                PhoneAccount callManager = TelecomApp.getInstance()
                         .getPhoneAccountRegistrar().getPhoneAccount(callManagerHandle);
                 if (callManager.hasCapabilities(PhoneAccount.CAPABILITY_PLACE_EMERGENCY_CALLS)) {
                     CallAttemptRecord callAttemptRecord = new CallAttemptRecord(callManagerHandle,
-                            TelecommApp.getInstance().getPhoneAccountRegistrar().
+                            TelecomApp.getInstance().getPhoneAccountRegistrar().
                                     getDefaultOutgoingPhoneAccount(mCall.getHandle().getScheme())
                     );
 
diff --git a/src/com/android/telecomm/CreateConnectionResponse.java b/src/com/android/server/telecom/CreateConnectionResponse.java
similarity index 91%
rename from src/com/android/telecomm/CreateConnectionResponse.java
rename to src/com/android/server/telecom/CreateConnectionResponse.java
index 13d1573..a1ffa38 100644
--- a/src/com/android/telecomm/CreateConnectionResponse.java
+++ b/src/com/android/server/telecom/CreateConnectionResponse.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
-import android.telecomm.ParcelableConnection;
+import android.telecom.ParcelableConnection;
 
 /**
  * A callback for providing the result of creating a connection.
diff --git a/src/com/android/telecomm/DtmfLocalTonePlayer.java b/src/com/android/server/telecom/DtmfLocalTonePlayer.java
similarity index 97%
rename from src/com/android/telecomm/DtmfLocalTonePlayer.java
rename to src/com/android/server/telecom/DtmfLocalTonePlayer.java
index 715b1e8..eb3f9a0 100644
--- a/src/com/android/telecomm/DtmfLocalTonePlayer.java
+++ b/src/com/android/server/telecom/DtmfLocalTonePlayer.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.media.AudioManager;
 import android.media.ToneGenerator;
@@ -110,7 +110,7 @@
         if (call == null) {
             return;
         }
-        TelecommApp app = TelecommApp.getInstance();
+        TelecomApp app = TelecomApp.getInstance();
 
         final boolean areLocalTonesEnabled;
         if (app.getResources().getBoolean(R.bool.allow_local_dtmf_tones)) {
diff --git a/src/com/android/telecomm/ErrorDialogActivity.java b/src/com/android/server/telecom/ErrorDialogActivity.java
similarity index 96%
rename from src/com/android/telecomm/ErrorDialogActivity.java
rename to src/com/android/server/telecom/ErrorDialogActivity.java
index 098a15f..0e6bca0 100644
--- a/src/com/android/telecomm/ErrorDialogActivity.java
+++ b/src/com/android/server/telecom/ErrorDialogActivity.java
@@ -14,17 +14,16 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.os.Bundle;
-import android.telecomm.TelecommManager;
 
 /**
- * Used to display an error dialog from within the Telecomm service when an outgoing call fails
+ * Used to display an error dialog from within the Telecom service when an outgoing call fails
  */
 public class ErrorDialogActivity extends Activity {
     private static final String TAG = ErrorDialogActivity.class.getSimpleName();
diff --git a/src/com/android/telecomm/HeadsetMediaButton.java b/src/com/android/server/telecom/HeadsetMediaButton.java
similarity index 94%
rename from src/com/android/telecomm/HeadsetMediaButton.java
rename to src/com/android/server/telecom/HeadsetMediaButton.java
index 9fd26fc..f0ea1e9 100644
--- a/src/com/android/telecomm/HeadsetMediaButton.java
+++ b/src/com/android/server/telecom/HeadsetMediaButton.java
@@ -14,16 +14,12 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
-import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
-import android.content.IntentFilter;
 import android.media.AudioAttributes;
-import android.media.AudioManager;
 import android.media.session.MediaSession;
-import android.media.session.MediaSessionManager;
 import android.view.KeyEvent;
 
 /**
diff --git a/src/com/android/telecomm/InCallAdapter.java b/src/com/android/server/telecom/InCallAdapter.java
similarity index 98%
rename from src/com/android/telecomm/InCallAdapter.java
rename to src/com/android/server/telecom/InCallAdapter.java
index 5217c81..5a93464 100644
--- a/src/com/android/telecomm/InCallAdapter.java
+++ b/src/com/android/server/telecom/InCallAdapter.java
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.os.Handler;
 import android.os.Message;
-import android.telecomm.PhoneAccountHandle;
+import android.telecom.PhoneAccountHandle;
 
 import com.android.internal.os.SomeArgs;
-import com.android.internal.telecomm.IInCallAdapter;
+import com.android.internal.telecom.IInCallAdapter;
 
 /**
  * Receives call commands and updates from in-call app and passes them through to CallsManager.
diff --git a/src/com/android/telecomm/InCallController.java b/src/com/android/server/telecom/InCallController.java
similarity index 95%
rename from src/com/android/telecomm/InCallController.java
rename to src/com/android/server/telecom/InCallController.java
index 59c06b5..26ac4a5 100644
--- a/src/com/android/telecomm/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -14,10 +14,9 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.Manifest;
-import android.app.PendingIntent;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -30,16 +29,16 @@
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.UserHandle;
-import android.telecomm.AudioState;
-import android.telecomm.CallProperties;
-import android.telecomm.CallState;
-import android.telecomm.InCallService;
-import android.telecomm.ParcelableCall;
-import android.telecomm.PhoneCapabilities;
-import android.telecomm.TelecommManager;
+import android.telecom.AudioState;
+import android.telecom.CallProperties;
+import android.telecom.CallState;
+import android.telecom.InCallService;
+import android.telecom.ParcelableCall;
+import android.telecom.PhoneCapabilities;
+import android.telecom.TelecomManager;
 import android.util.ArrayMap;
 
-import com.android.internal.telecomm.IInCallService;
+import com.android.internal.telecom.IInCallService;
 import com.google.common.collect.ImmutableCollection;
 
 import java.util.ArrayList;
@@ -137,7 +136,7 @@
     private final ComponentName mInCallComponentName;
 
     public InCallController() {
-        Context context = TelecommApp.getInstance();
+        Context context = TelecomApp.getInstance();
         Resources resources = context.getResources();
 
         mInCallComponentName = new ComponentName(
@@ -246,7 +245,7 @@
             mServiceConnections.entrySet().iterator();
         while (iterator.hasNext()) {
             Log.i(this, "Unbinding from InCallService %s");
-            TelecommApp.getInstance().unbindService(iterator.next().getValue());
+            TelecomApp.getInstance().unbindService(iterator.next().getValue());
             iterator.remove();
         }
         mInCallServices.clear();
@@ -260,8 +259,8 @@
         ThreadUtil.checkOnMainThread();
         if (mInCallServices.isEmpty()) {
             mServiceConnections.clear();
-            Context context = TelecommApp.getInstance();
-            PackageManager packageManager = TelecommApp.getInstance().getPackageManager();
+            Context context = TelecomApp.getInstance();
+            PackageManager packageManager = TelecomApp.getInstance().getPackageManager();
             Intent serviceIntent = new Intent(InCallService.SERVICE_INTERFACE);
 
             for (ResolveInfo entry : packageManager.queryIntentServices(serviceIntent, 0)) {
@@ -360,7 +359,7 @@
     private void onDisconnected(ComponentName disconnectedComponent) {
         Log.i(this, "onDisconnected from %s", disconnectedComponent);
         ThreadUtil.checkOnMainThread();
-        Context context = TelecommApp.getInstance();
+        Context context = TelecomApp.getInstance();
 
         if (mInCallServices.containsKey(disconnectedComponent)) {
             mInCallServices.remove(disconnectedComponent);
@@ -464,10 +463,10 @@
             capabilities |= PhoneCapabilities.RESPOND_VIA_TEXT;
         }
 
-        Uri handle = call.getHandlePresentation() == TelecommManager.PRESENTATION_ALLOWED ?
+        Uri handle = call.getHandlePresentation() == TelecomManager.PRESENTATION_ALLOWED ?
                 call.getHandle() : null;
         String callerDisplayName = call.getCallerDisplayNamePresentation() ==
-                TelecommManager.PRESENTATION_ALLOWED ?  call.getCallerDisplayName() : null;
+                TelecomManager.PRESENTATION_ALLOWED ?  call.getCallerDisplayName() : null;
 
         List<Call> conferenceableCalls = call.getConferenceableCalls();
         List<String> conferenceableCallIds = new ArrayList<String>(conferenceableCalls.size());
diff --git a/src/com/android/telecomm/InCallToneMonitor.java b/src/com/android/server/telecom/InCallToneMonitor.java
similarity index 97%
rename from src/com/android/telecomm/InCallToneMonitor.java
rename to src/com/android/server/telecom/InCallToneMonitor.java
index 5757540..2ffb499 100644
--- a/src/com/android/telecomm/InCallToneMonitor.java
+++ b/src/com/android/server/telecom/InCallToneMonitor.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
-import android.telecomm.CallState;
+import android.telecom.CallState;
 import android.telephony.DisconnectCause;
 
 import java.util.Collection;
diff --git a/src/com/android/telecomm/InCallTonePlayer.java b/src/com/android/server/telecom/InCallTonePlayer.java
similarity index 99%
rename from src/com/android/telecomm/InCallTonePlayer.java
rename to src/com/android/server/telecom/InCallTonePlayer.java
index 5ccdafa..2ffe599 100644
--- a/src/com/android/telecomm/InCallTonePlayer.java
+++ b/src/com/android/server/telecom/InCallTonePlayer.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.media.AudioManager;
 import android.media.ToneGenerator;
diff --git a/src/com/android/telecomm/Log.java b/src/com/android/server/telecom/Log.java
similarity index 98%
rename from src/com/android/telecomm/Log.java
rename to src/com/android/server/telecom/Log.java
index 3b241fa..ff3c8ce 100644
--- a/src/com/android/telecomm/Log.java
+++ b/src/com/android/server/telecom/Log.java
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.net.Uri;
-import android.telecomm.PhoneAccount;
+import android.telecom.PhoneAccount;
 import android.telephony.PhoneNumberUtils;
 
 import java.security.MessageDigest;
@@ -31,7 +31,7 @@
 public class Log {
 
     // Generic tag for all In Call logging
-    private static final String TAG = "Telecomm";
+    private static final String TAG = "Telecom";
 
     public static final boolean FORCE_LOGGING = false; /* STOP SHIP if true */
     public static final boolean DEBUG = isLoggable(android.util.Log.DEBUG);
diff --git a/src/com/android/telecomm/MissedCallNotifier.java b/src/com/android/server/telecom/MissedCallNotifier.java
similarity index 95%
rename from src/com/android/telecomm/MissedCallNotifier.java
rename to src/com/android/server/telecom/MissedCallNotifier.java
index f3c87e2..553d2e1 100644
--- a/src/com/android/telecomm/MissedCallNotifier.java
+++ b/src/com/android/server/telecom/MissedCallNotifier.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.app.Notification;
 import android.app.NotificationManager;
@@ -31,7 +31,7 @@
 import android.net.Uri;
 import android.provider.CallLog;
 import android.provider.CallLog.Calls;
-import android.telecomm.CallState;
+import android.telecom.CallState;
 import android.telephony.DisconnectCause;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
@@ -214,8 +214,8 @@
      * Creates an intent to be invoked when the missed call notification is cleared.
      */
     private PendingIntent createClearMissedCallsPendingIntent() {
-        return createTelecommPendingIntent(
-                TelecommBroadcastReceiver.ACTION_CLEAR_MISSED_CALLS, null);
+        return createTelecomPendingIntent(
+                TelecomBroadcastReceiver.ACTION_CLEAR_MISSED_CALLS, null);
     }
 
     /**
@@ -225,8 +225,8 @@
      * @param handle The handle to call back.
      */
     private PendingIntent createCallBackPendingIntent(Uri handle) {
-        return createTelecommPendingIntent(
-                TelecommBroadcastReceiver.ACTION_CALL_BACK_FROM_NOTIFICATION, handle);
+        return createTelecomPendingIntent(
+                TelecomBroadcastReceiver.ACTION_CALL_BACK_FROM_NOTIFICATION, handle);
     }
 
     /**
@@ -234,20 +234,20 @@
      * notification.
      */
     private PendingIntent createSendSmsFromNotificationPendingIntent(Uri handle) {
-        return createTelecommPendingIntent(
-                TelecommBroadcastReceiver.ACTION_SEND_SMS_FROM_NOTIFICATION,
+        return createTelecomPendingIntent(
+                TelecomBroadcastReceiver.ACTION_SEND_SMS_FROM_NOTIFICATION,
                 Uri.fromParts(Constants.SCHEME_SMSTO, handle.getSchemeSpecificPart(), null));
     }
 
     /**
      * Creates generic pending intent from the specified parameters to be received by
-     * {@link TelecommBroadcastReceiver}.
+     * {@link TelecomBroadcastReceiver}.
      *
      * @param action The intent action.
      * @param data The intent data.
      */
-    private PendingIntent createTelecommPendingIntent(String action, Uri data) {
-        Intent intent = new Intent(action, data, mContext, TelecommBroadcastReceiver.class);
+    private PendingIntent createTelecomPendingIntent(String action, Uri data) {
+        Intent intent = new Intent(action, data, mContext, TelecomBroadcastReceiver.class);
         return PendingIntent.getBroadcast(mContext, 0, intent, 0);
     }
 
diff --git a/src/com/android/telecomm/MultiLineTitleEditTextPreference.java b/src/com/android/server/telecom/MultiLineTitleEditTextPreference.java
similarity index 93%
rename from src/com/android/telecomm/MultiLineTitleEditTextPreference.java
rename to src/com/android/server/telecom/MultiLineTitleEditTextPreference.java
index d40cb21..d94dc60 100644
--- a/src/com/android/telecomm/MultiLineTitleEditTextPreference.java
+++ b/src/com/android/server/telecom/MultiLineTitleEditTextPreference.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.Context;
 import android.preference.EditTextPreference;
@@ -39,10 +39,10 @@
  * TODO: Also, it would reduce clutter if this could be an inner class in
  * RespondViaSmsManager.java, but then there would be no way to reference the
  * class from XML.  That's because
- *    <com.android.telecomm.MultiLineTitleEditTextPreference ... />
+ *    <com.android.server.telecom.MultiLineTitleEditTextPreference ... />
  * isn't valid XML syntax due to the "$" character.  And Preference
  * elements don't have a "class" attribute, so you can't do something like
- * <view class="com.android.telecomm.Foo$Bar"> as you can with regular views.
+ * <view class="com.android.server.telecom.Foo$Bar"> as you can with regular views.
  */
 public class MultiLineTitleEditTextPreference extends EditTextPreference {
     public MultiLineTitleEditTextPreference(Context context, AttributeSet attrs, int defStyle) {
diff --git a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
similarity index 95%
rename from src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
rename to src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
index e2b4a15..3fbe498 100644
--- a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
+++ b/src/com/android/server/telecom/NewOutgoingCallIntentBroadcaster.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.app.Activity;
 import android.content.BroadcastReceiver;
@@ -23,10 +23,10 @@
 import android.content.res.Resources;
 import android.net.Uri;
 import android.os.UserHandle;
-import android.telecomm.GatewayInfo;
-import android.telecomm.PhoneAccount;
-import android.telecomm.TelecommManager;
-import android.telecomm.VideoProfile;
+import android.telecom.GatewayInfo;
+import android.telecom.PhoneAccount;
+import android.telecom.TelecomManager;
+import android.telecom.VideoProfile;
 import android.telephony.DisconnectCause;
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
@@ -52,7 +52,7 @@
     private static final String PERMISSION = android.Manifest.permission.PROCESS_OUTGOING_CALLS;
 
     private static final String EXTRA_ACTUAL_NUMBER_TO_DIAL =
-            "android.telecomm.extra.ACTUAL_NUMBER_TO_DIAL";
+            "android.telecom.extra.ACTUAL_NUMBER_TO_DIAL";
 
     /**
      * Legacy string constants used to retrieve gateway provider extras from intents. These still
@@ -130,9 +130,9 @@
 
             GatewayInfo gatewayInfo = getGateWayInfoFromIntent(intent, resultHandleUri);
             mCallsManager.placeOutgoingCall(mCall, resultHandleUri, gatewayInfo,
-                    mIntent.getBooleanExtra(TelecommManager.EXTRA_START_CALL_WITH_SPEAKERPHONE,
+                    mIntent.getBooleanExtra(TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE,
                             false),
-                    mIntent.getIntExtra(TelecommManager.EXTRA_START_CALL_WITH_VIDEO_STATE,
+                    mIntent.getIntExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE,
                             VideoProfile.VideoState.AUDIO_ONLY));
         }
     }
@@ -153,7 +153,7 @@
     int processIntent() {
         Log.v(this, "Processing call intent in OutgoingCallIntentBroadcaster.");
 
-        final Context context = TelecommApp.getInstance();
+        final Context context = TelecomApp.getInstance();
 
         Intent intent = mIntent;
         String action = intent.getAction();
@@ -172,7 +172,7 @@
                         + " OutgoingCallBroadcastReceiver: %s", intent);
 
                 boolean speakerphoneOn = mIntent.getBooleanExtra(
-                        TelecommManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, false);
+                        TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, false);
                 mCallsManager.placeOutgoingCall(mCall, handle, null, speakerphoneOn,
                         VideoProfile.VideoState.AUDIO_ONLY);
 
@@ -232,9 +232,9 @@
                     + " OutgoingCallBroadcastReceiver: %s", intent);
             String scheme = isUriNumber ? PhoneAccount.SCHEME_SIP : PhoneAccount.SCHEME_TEL;
             boolean speakerphoneOn = mIntent.getBooleanExtra(
-                    TelecommManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, false);
+                    TelecomManager.EXTRA_START_CALL_WITH_SPEAKERPHONE, false);
             int videoState = mIntent.getIntExtra(
-                    TelecommManager.EXTRA_START_CALL_WITH_VIDEO_STATE,
+                    TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE,
                     VideoProfile.VideoState.AUDIO_ONLY);
             mCallsManager.placeOutgoingCall(mCall, Uri.fromParts(scheme, number, null), null,
                     speakerphoneOn, videoState);
diff --git a/src/com/android/telecomm/PhoneAccountBroadcastReceiver.java b/src/com/android/server/telecom/PhoneAccountBroadcastReceiver.java
similarity index 81%
rename from src/com/android/telecomm/PhoneAccountBroadcastReceiver.java
rename to src/com/android/server/telecom/PhoneAccountBroadcastReceiver.java
index 69639b6..6152bef 100644
--- a/src/com/android/telecomm/PhoneAccountBroadcastReceiver.java
+++ b/src/com/android/server/telecom/PhoneAccountBroadcastReceiver.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -25,13 +25,13 @@
 
 /**
  * Captures {@code android.intent.action.ACTION_PACKAGE_FULLY_REMOVED} intents and triggers the
- * removal of associated {@link android.telecomm.PhoneAccount}s via the
- * {@link com.android.telecomm.PhoneAccountRegistrar}.
+ * removal of associated {@link android.telecom.PhoneAccount}s via the
+ * {@link com.android.telecom.PhoneAccountRegistrar}.
  * Note: This class listens for the {@code PACKAGE_FULLY_REMOVED} intent rather than
  * {@code PACKAGE_REMOVED} as {@code PACKAGE_REMOVED} is triggered on re-installation of the same
  * package, where {@code PACKAGE_FULLY_REMOVED} is triggered only when an application is completely
  * uninstalled.  This is desirable as we do not wish to un-register all
- * {@link android.telecomm.PhoneAccount}s associated with a package being re-installed to ensure
+ * {@link android.telecom.PhoneAccount}s associated with a package being re-installed to ensure
  * the enabled state of the accounts is retained.
  */
 public class PhoneAccountBroadcastReceiver extends BroadcastReceiver {
@@ -56,17 +56,17 @@
 
     /**
      * Handles the removal of a package by calling upon the {@link PhoneAccountRegistrar} to
-     * un-register any {@link android.telecomm.PhoneAccount}s associated with the package.
+     * un-register any {@link android.telecom.PhoneAccount}s associated with the package.
      *
      * @param packageName The name of the removed package.
      */
     private void handlePackageRemoved(Context context, String packageName) {
-        TelecommApp telecommApp = TelecommApp.getInstance();
-        if (telecommApp == null) {
+        TelecomApp telecomApp = TelecomApp.getInstance();
+        if (telecomApp == null) {
             return;
         }
 
-        PhoneAccountRegistrar registrar = telecommApp.getPhoneAccountRegistrar();
+        PhoneAccountRegistrar registrar = telecomApp.getPhoneAccountRegistrar();
         if (registrar == null) {
             return;
         }
diff --git a/src/com/android/telecomm/PhoneAccountRegistrar.java b/src/com/android/server/telecom/PhoneAccountRegistrar.java
similarity index 97%
rename from src/com/android/telecomm/PhoneAccountRegistrar.java
rename to src/com/android/server/telecom/PhoneAccountRegistrar.java
index ce8a1ea..31dd727 100644
--- a/src/com/android/telecomm/PhoneAccountRegistrar.java
+++ b/src/com/android/server/telecom/PhoneAccountRegistrar.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.Manifest;
 import android.content.Intent;
@@ -24,13 +24,13 @@
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
 import android.provider.Settings;
-import android.telecomm.ConnectionService;
-import android.telecomm.PhoneAccount;
-import android.telecomm.PhoneAccountHandle;
+import android.telecom.ConnectionService;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.net.Uri;
-import android.telecomm.TelecommManager;
 import android.text.TextUtils;
 import android.util.AtomicFile;
 import android.util.Xml;
@@ -62,8 +62,8 @@
 
 /**
  * Handles writing and reading PhoneAccountHandle registration entries. This is a simple verbatim
- * delegate for all the account handling methods on {@link TelecommManager} as implemented in
- * {@link TelecommServiceImpl}, with the notable exception that {@link TelecommServiceImpl} is
+ * delegate for all the account handling methods on {@link android.telecom.TelecomManager} as implemented in
+ * {@link TelecomServiceImpl}, with the notable exception that {@link TelecomServiceImpl} is
  * responsible for security checking to make sure that the caller has proper authority over
  * the {@code ComponentName}s they are declaring in their {@code PhoneAccountHandle}s.
  */
@@ -96,7 +96,7 @@
 
     @VisibleForTesting
     public PhoneAccountRegistrar(Context context, String fileName) {
-        // TODO: Change file location when Telecomm is part of system
+        // TODO: Change file location when Telecom is part of system
         mAtomicFile = new AtomicFile(new File(context.getFilesDir(), fileName));
         mState = new State();
         mContext = context;
@@ -482,7 +482,7 @@
      * @return {@code True} if the phone account has permission.
      */
     public boolean phoneAccountHasPermission(PhoneAccountHandle phoneAccountHandle) {
-        PackageManager packageManager = TelecommApp.getInstance().getPackageManager();
+        PackageManager packageManager = TelecomApp.getInstance().getPackageManager();
         try {
             ServiceInfo serviceInfo = packageManager.getServiceInfo(
                     phoneAccountHandle.getComponentName(), 0);
@@ -542,12 +542,12 @@
         Intent intent;
 
         if (isEnabled) {
-            intent = new Intent(TelecommManager.ACTION_PHONE_ACCOUNT_ENABLED);
+            intent = new Intent(TelecomManager.ACTION_PHONE_ACCOUNT_ENABLED);
         } else {
-            intent = new Intent(TelecommManager.ACTION_PHONE_ACCOUNT_DISABLED);
+            intent = new Intent(TelecomManager.ACTION_PHONE_ACCOUNT_DISABLED);
         }
         intent.setPackage(phoneAccountHandle.getComponentName().getPackageName());
-        intent.putExtra(TelecommManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+        intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
 
         if (isReceiverListening(intent)) {
             Log.i(this, "notifyPhoneAccountEnabledState %s %s", phoneAccountHandle,
@@ -587,7 +587,7 @@
         public PhoneAccountHandle simCallManager;
 
         /**
-         * The complete list of {@code PhoneAccount}s known to the Telecomm subsystem.
+         * The complete list of {@code PhoneAccount}s known to the Telecom subsystem.
          */
         public final List<PhoneAccount> accounts = new ArrayList<>();
 
diff --git a/src/com/android/telecomm/PhoneStateBroadcaster.java b/src/com/android/server/telecom/PhoneStateBroadcaster.java
similarity index 97%
rename from src/com/android/telecomm/PhoneStateBroadcaster.java
rename to src/com/android/server/telecom/PhoneStateBroadcaster.java
index b57f092..d0d0b68 100644
--- a/src/com/android/telecomm/PhoneStateBroadcaster.java
+++ b/src/com/android/server/telecom/PhoneStateBroadcaster.java
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.telecomm.CallState;
+import android.telecom.CallState;
 import android.telephony.TelephonyManager;
 
 import com.android.internal.telephony.ITelephonyRegistry;
diff --git a/src/com/android/telecomm/ProximitySensorManager.java b/src/com/android/server/telecom/ProximitySensorManager.java
similarity index 98%
rename from src/com/android/telecomm/ProximitySensorManager.java
rename to src/com/android/server/telecom/ProximitySensorManager.java
index 1fabd66..289366f 100644
--- a/src/com/android/telecomm/ProximitySensorManager.java
+++ b/src/com/android/server/telecom/ProximitySensorManager.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.Context;
 import android.os.PowerManager;
diff --git a/src/com/android/telecomm/QuickResponseUtils.java b/src/com/android/server/telecom/QuickResponseUtils.java
similarity index 88%
rename from src/com/android/telecomm/QuickResponseUtils.java
rename to src/com/android/server/telecom/QuickResponseUtils.java
index ead9105..dad2907 100644
--- a/src/com/android/telecomm/QuickResponseUtils.java
+++ b/src/com/android/server/telecom/QuickResponseUtils.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.Context;
 import android.content.SharedPreferences;
@@ -43,32 +43,32 @@
     public static final String KEY_CANNED_RESPONSE_PREF_4 = "canned_response_pref_4";
 
     /**
-     * As of L, QuickResponses were moved from Telephony to Telecomm. Because of
+     * As of L, QuickResponses were moved from Telephony to Telecom. Because of
      * this, we need to make sure that we migrate any old QuickResponses to our
      * current SharedPreferences.  This is a lazy migration as it happens only when
      * the QuickResponse settings are viewed or if they are queried via RespondViaSmsManager.
      */
     public static void maybeMigrateLegacyQuickResponses() {
         // The algorithm will go as such:
-        // If Telecomm QuickResponses exist, we will skip migration because this implies
+        // If Telecom QuickResponses exist, we will skip migration because this implies
         // that a user has already specified their desired QuickResponses and have abandoned any
         // older QuickResponses.
-        // Then, if Telephony QuickResponses exist, we will move those to Telecomm.
-        // If neither exist, we'll populate Telecomm with the default QuickResponses.
+        // Then, if Telephony QuickResponses exist, we will move those to Telecom.
+        // If neither exist, we'll populate Telecom with the default QuickResponses.
         // This guarantees the caller that QuickResponses exist in SharedPreferences after this
         // function is called.
 
         Log.d(LOG_TAG, "maybeMigrateLegacyQuickResponses() - Starting");
 
-        final Context telecommContext = TelecommApp.getInstance();
-        final SharedPreferences prefs = telecommContext.getSharedPreferences(
+        final Context telecomContext = TelecomApp.getInstance();
+        final SharedPreferences prefs = telecomContext.getSharedPreferences(
                 SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
-        final Resources res = telecommContext.getResources();
+        final Resources res = telecomContext.getResources();
 
         final boolean responsesExist = prefs.contains(KEY_CANNED_RESPONSE_PREF_1);
         if (responsesExist) {
             // If one QuickResponse exists, they all exist.
-            Log.d(LOG_TAG, "maybeMigrateLegacyQuickResponses() - Telecomm QuickResponses exist");
+            Log.d(LOG_TAG, "maybeMigrateLegacyQuickResponses() - Telecom QuickResponses exist");
             return;
         }
 
@@ -84,7 +84,7 @@
         // the Telephony package and we'll fall back on using our default values.
         Context telephonyContext = null;
         try {
-            telephonyContext = telecommContext.createPackageContext(PACKAGE_NAME_TELEPHONY, 0);
+            telephonyContext = telecomContext.createPackageContext(PACKAGE_NAME_TELEPHONY, 0);
         } catch (PackageManager.NameNotFoundException e) {
             Log.e(LOG_TAG, e, "maybeMigrateLegacyQuickResponses() - Can't find Telephony package.");
         }
@@ -102,7 +102,7 @@
             cannedResponse4 = oldPrefs.getString(KEY_CANNED_RESPONSE_PREF_4, cannedResponse4);
         }
 
-        // Either way, write them back into Telecomm SharedPreferences.
+        // Either way, write them back into Telecom SharedPreferences.
         final SharedPreferences.Editor editor = prefs.edit();
         editor.putString(KEY_CANNED_RESPONSE_PREF_1, cannedResponse1);
         editor.putString(KEY_CANNED_RESPONSE_PREF_2, cannedResponse2);
diff --git a/src/com/android/telecomm/README b/src/com/android/server/telecom/README
similarity index 100%
rename from src/com/android/telecomm/README
rename to src/com/android/server/telecom/README
diff --git a/src/com/android/telecomm/RespondViaSmsManager.java b/src/com/android/server/telecom/RespondViaSmsManager.java
similarity index 93%
rename from src/com/android/telecomm/RespondViaSmsManager.java
rename to src/com/android/server/telecom/RespondViaSmsManager.java
index 60f419d..6c054e6 100644
--- a/src/com/android/telecomm/RespondViaSmsManager.java
+++ b/src/com/android/server/telecom/RespondViaSmsManager.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import com.android.internal.os.SomeArgs;
 import com.android.internal.telephony.SmsApplication;
@@ -27,7 +27,7 @@
 import android.net.Uri;
 import android.os.Handler;
 import android.os.Message;
-import android.telecomm.Response;
+import android.telecom.Response;
 import android.telephony.TelephonyManager;
 import android.widget.Toast;
 
@@ -95,9 +95,9 @@
                 // old QuickResponses in Telephony pre L.
                 QuickResponseUtils.maybeMigrateLegacyQuickResponses();
 
-                final SharedPreferences prefs = TelecommApp.getInstance().getSharedPreferences(
+                final SharedPreferences prefs = TelecomApp.getInstance().getSharedPreferences(
                         QuickResponseUtils.SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
-                final Resources res = TelecommApp.getInstance().getInstance().getResources();
+                final Resources res = TelecomApp.getInstance().getInstance().getResources();
 
                 final ArrayList<String> textMessages = new ArrayList<>(
                         QuickResponseUtils.NUM_CANNED_RESPONSES);
@@ -136,11 +136,11 @@
         // ...and show a brief confirmation to the user (since
         // otherwise it's hard to be sure that anything actually
         // happened.)
-        final Resources res = TelecommApp.getInstance().getResources();
+        final Resources res = TelecomApp.getInstance().getResources();
         final String formatString = res.getString(
                 R.string.respond_via_sms_confirmation_format);
         final String confirmationMsg = String.format(formatString, phoneNumber);
-        Toast.makeText(TelecommApp.getInstance(), confirmationMsg,
+        Toast.makeText(TelecomApp.getInstance(), confirmationMsg,
                 Toast.LENGTH_LONG).show();
 
         // TODO: If the device is locked, this toast won't actually ever
@@ -165,7 +165,7 @@
         if (textMessage != null) {
             final ComponentName component =
                     SmsApplication.getDefaultRespondViaMessageApplication(
-                            TelecommApp.getInstance(), true /*updateIfNeeded*/);
+                            TelecomApp.getInstance(), true /*updateIfNeeded*/);
             if (component != null) {
                 // Build and send the intent
                 final Uri uri = Uri.fromParts(Constants.SCHEME_SMSTO, phoneNumber, null);
@@ -173,7 +173,7 @@
                 intent.putExtra(Intent.EXTRA_TEXT, textMessage);
                 mHandler.obtainMessage(MSG_SHOW_SENT_TOAST, phoneNumber).sendToTarget();
                 intent.setComponent(component);
-                TelecommApp.getInstance().startService(intent);
+                TelecomApp.getInstance().startService(intent);
             }
         }
     }
diff --git a/src/com/android/telecomm/RespondViaSmsSettings.java b/src/com/android/server/telecom/RespondViaSmsSettings.java
similarity index 97%
rename from src/com/android/telecomm/RespondViaSmsSettings.java
rename to src/com/android/server/telecom/RespondViaSmsSettings.java
index ecca39c..23bf7b2 100644
--- a/src/com/android/telecomm/RespondViaSmsSettings.java
+++ b/src/com/android/server/telecom/RespondViaSmsSettings.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.app.ActionBar;
 import android.app.Activity;
@@ -34,7 +34,7 @@
     private static final String KEY_PREFERRED_PACKAGE = "preferred_package_pref";
     private static final String KEY_INSTANT_TEXT_DEFAULT_COMPONENT = "instant_text_def_component";
 
-    // TODO: This class is newly copied into Telecomm (com.android.telecomm) from it previous
+    // TODO: This class is newly copied into Telecom (com.android.server.telecom) from it previous
     // location in Telephony (com.android.phone). User's preferences stored in the old location
     // will be lost. We need code here to migrate KLP -> LMP settings values.
 
diff --git a/src/com/android/telecomm/RingbackPlayer.java b/src/com/android/server/telecom/RingbackPlayer.java
similarity index 98%
rename from src/com/android/telecomm/RingbackPlayer.java
rename to src/com/android/server/telecom/RingbackPlayer.java
index 645844a..dc06c95 100644
--- a/src/com/android/telecomm/RingbackPlayer.java
+++ b/src/com/android/server/telecom/RingbackPlayer.java
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
-import android.telecomm.CallState;
+import android.telecom.CallState;
 
 import com.google.common.base.Preconditions;
 
diff --git a/src/com/android/telecomm/Ringer.java b/src/com/android/server/telecom/Ringer.java
similarity index 97%
rename from src/com/android/telecomm/Ringer.java
rename to src/com/android/server/telecom/Ringer.java
index 9c554ce..34f6829 100644
--- a/src/com/android/telecomm/Ringer.java
+++ b/src/com/android/server/telecom/Ringer.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.app.Notification;
 import android.app.NotificationManager;
@@ -26,7 +26,7 @@
 import android.os.SystemVibrator;
 import android.os.Vibrator;
 import android.provider.Settings;
-import android.telecomm.CallState;
+import android.telecom.CallState;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -83,7 +83,7 @@
         mContext = context;
         // We don't rely on getSystemService(Context.VIBRATOR_SERVICE) to make sure this
         // vibrator object will be isolated from others.
-        mVibrator = new SystemVibrator(TelecommApp.getInstance());
+        mVibrator = new SystemVibrator(TelecomApp.getInstance());
     }
 
     @Override
@@ -197,7 +197,7 @@
                 Log.v(this, "startRingingOrCallWaiting, skipping because volume is 0");
             }
 
-            if (shouldVibrate(TelecommApp.getInstance()) && !mIsVibrating) {
+            if (shouldVibrate(TelecomApp.getInstance()) && !mIsVibrating) {
                 mVibrator.vibrate(VIBRATION_PATTERN, VIBRATION_PATTERN_REPEAT,
                         VIBRATION_ATTRIBUTES);
                 mIsVibrating = true;
diff --git a/src/com/android/telecomm/ServiceBinder.java b/src/com/android/server/telecom/ServiceBinder.java
similarity index 98%
rename from src/com/android/telecomm/ServiceBinder.java
rename to src/com/android/server/telecom/ServiceBinder.java
index 48442de..98e7bd0 100644
--- a/src/com/android/telecomm/ServiceBinder.java
+++ b/src/com/android/server/telecom/ServiceBinder.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.ComponentName;
 import android.content.Context;
@@ -171,7 +171,7 @@
         Preconditions.checkState(!Strings.isNullOrEmpty(serviceAction));
         Preconditions.checkNotNull(componentName);
 
-        mContext = TelecommApp.getInstance();
+        mContext = TelecomApp.getInstance();
         mServiceAction = serviceAction;
         mComponentName = componentName;
     }
diff --git a/src/com/android/telecomm/StatusBarNotifier.java b/src/com/android/server/telecom/StatusBarNotifier.java
similarity index 98%
rename from src/com/android/telecomm/StatusBarNotifier.java
rename to src/com/android/server/telecom/StatusBarNotifier.java
index eea187f..14253a0 100644
--- a/src/com/android/telecomm/StatusBarNotifier.java
+++ b/src/com/android/server/telecom/StatusBarNotifier.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.app.StatusBarManager;
 import android.content.Context;
diff --git a/src/com/android/telecomm/TelecommApp.java b/src/com/android/server/telecom/TelecomApp.java
similarity index 71%
rename from src/com/android/telecomm/TelecommApp.java
rename to src/com/android/server/telecom/TelecomApp.java
index 9a075b2..c2e79eb 100644
--- a/src/com/android/telecomm/TelecommApp.java
+++ b/src/com/android/server/telecom/TelecomApp.java
@@ -14,28 +14,27 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.app.Application;
 import android.os.UserHandle;
-import android.telecomm.PhoneAccountHandle;
 
 /**
- * Top-level Application class for Telecomm.
+ * Top-level Application class for Telecom.
  */
-public final class TelecommApp extends Application {
+public final class TelecomApp extends Application {
 
-    /** Singleton instance of TelecommApp. */
-    private static TelecommApp sInstance;
+    /** Singleton instance of TelecomApp. */
+    private static TelecomApp sInstance;
 
     /**
      * Missed call notifier. Exists here so that the instance can be shared with
-     * {@link TelecommBroadcastReceiver}.
+     * {@link TelecomBroadcastReceiver}.
      */
     private MissedCallNotifier mMissedCallNotifier;
 
     /**
-     * Maintains the list of registered {@link android.telecomm.PhoneAccountHandle}s.
+     * Maintains the list of registered {@link android.telecom.PhoneAccountHandle}s.
      */
     private PhoneAccountRegistrar mPhoneAccountRegistrar;
 
@@ -48,13 +47,13 @@
         mPhoneAccountRegistrar = new PhoneAccountRegistrar(this);
 
         if (UserHandle.myUserId() == UserHandle.USER_OWNER) {
-            TelecommServiceImpl.init(mMissedCallNotifier, mPhoneAccountRegistrar);
+            TelecomServiceImpl.init(mMissedCallNotifier, mPhoneAccountRegistrar);
         }
     }
 
-    public static TelecommApp getInstance() {
+    public static TelecomApp getInstance() {
         if (null == sInstance) {
-            throw new IllegalStateException("No TelecommApp running.");
+            throw new IllegalStateException("No TelecomApp running.");
         }
         return sInstance;
     }
diff --git a/src/com/android/telecomm/TelecommBroadcastReceiver.java b/src/com/android/server/telecom/TelecomBroadcastReceiver.java
similarity index 84%
rename from src/com/android/telecomm/TelecommBroadcastReceiver.java
rename to src/com/android/server/telecom/TelecomBroadcastReceiver.java
index 1168b89..36c23fc 100644
--- a/src/com/android/telecomm/TelecommBroadcastReceiver.java
+++ b/src/com/android/server/telecom/TelecomBroadcastReceiver.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -22,21 +22,21 @@
 import android.os.UserHandle;
 
 /**
- * Handles miscellaneous Telecomm broadcast intents. This should be visible from outside, but
+ * Handles miscellaneous Telecom broadcast intents. This should be visible from outside, but
  * should not be in the "exported" state.
  */
-public final class TelecommBroadcastReceiver extends BroadcastReceiver {
+public final class TelecomBroadcastReceiver extends BroadcastReceiver {
     /** The action used to send SMS response for the missed call notification. */
     static final String ACTION_SEND_SMS_FROM_NOTIFICATION =
-            "com.android.telecomm.ACTION_SEND_SMS_FROM_NOTIFICATION";
+            "com.android.server.telecom.ACTION_SEND_SMS_FROM_NOTIFICATION";
 
     /** The action used to call a handle back for the missed call notification. */
     static final String ACTION_CALL_BACK_FROM_NOTIFICATION =
-            "com.android.telecomm.ACTION_CALL_BACK_FROM_NOTIFICATION";
+            "com.android.server.telecom.ACTION_CALL_BACK_FROM_NOTIFICATION";
 
     /** The action used to clear missed calls. */
     static final String ACTION_CLEAR_MISSED_CALLS =
-            "com.android.telecomm.ACTION_CLEAR_MISSED_CALLS";
+            "com.android.server.telecom.ACTION_CLEAR_MISSED_CALLS";
 
 
     /** {@inheritDoc} */
@@ -46,7 +46,7 @@
 
         Log.v(this, "Action received: %s.", action);
 
-        MissedCallNotifier missedCallNotifier = TelecommApp.getInstance().getMissedCallNotifier();
+        MissedCallNotifier missedCallNotifier = TelecomApp.getInstance().getMissedCallNotifier();
 
         // Send an SMS from the missed call notification.
         if (ACTION_SEND_SMS_FROM_NOTIFICATION.equals(action)) {
diff --git a/src/com/android/telecomm/TelecommServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
similarity index 87%
rename from src/com/android/telecomm/TelecommServiceImpl.java
rename to src/com/android/server/telecom/TelecomServiceImpl.java
index cce34d0..5bce513 100644
--- a/src/com/android/telecomm/TelecommServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.app.AppOpsManager;
 import android.content.ComponentName;
@@ -30,22 +30,22 @@
 import android.os.Message;
 import android.os.ServiceManager;
 import android.os.UserHandle;
-import android.telecomm.CallState;
-import android.telecomm.PhoneAccount;
-import android.telecomm.PhoneAccountHandle;
-import android.telecomm.TelecommManager;
+import android.telecom.CallState;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
 import android.telephony.TelephonyManager;
 
-import com.android.internal.telecomm.ITelecommService;
+import com.android.internal.telecom.ITelecomService;
 
 import java.util.List;
 
 /**
- * Implementation of the ITelecomm interface.
+ * Implementation of the ITelecom interface.
  */
-public class TelecommServiceImpl extends ITelecommService.Stub {
+public class TelecomServiceImpl extends ITelecomService.Stub {
     private static final String REGISTER_PROVIDER_OR_SUBSCRIPTION =
-            "com.android.telecomm.permission.REGISTER_PROVIDER_OR_SUBSCRIPTION";
+            "com.android.server.telecom.permission.REGISTER_PROVIDER_OR_SUBSCRIPTION";
 
     /** ${inheritDoc} */
     @Override
@@ -108,9 +108,9 @@
     }
 
     /** Private constructor; @see init() */
-    private static final String TAG = TelecommServiceImpl.class.getSimpleName();
+    private static final String TAG = TelecomServiceImpl.class.getSimpleName();
 
-    private static final String SERVICE_NAME = "telecomm";
+    private static final String SERVICE_NAME = "telecom";
 
     private static final int MSG_SILENCE_RINGER = 1;
     private static final int MSG_SHOW_CALL_SCREEN = 2;
@@ -121,7 +121,7 @@
     private static final int MSG_GET_CURRENT_TTY_MODE = 7;
 
     /** The singleton instance. */
-    private static TelecommServiceImpl sInstance;
+    private static TelecomServiceImpl sInstance;
 
     private final MainThreadHandler mMainThreadHandler = new MainThreadHandler();
     private final CallsManager mCallsManager = CallsManager.getInstance();
@@ -129,12 +129,12 @@
     private final PhoneAccountRegistrar mPhoneAccountRegistrar;
     private final AppOpsManager mAppOpsManager;
 
-    private TelecommServiceImpl(
+    private TelecomServiceImpl(
             MissedCallNotifier missedCallNotifier, PhoneAccountRegistrar phoneAccountRegistrar) {
         mMissedCallNotifier = missedCallNotifier;
         mPhoneAccountRegistrar = phoneAccountRegistrar;
         mAppOpsManager =
-                (AppOpsManager) TelecommApp.getInstance().getSystemService(Context.APP_OPS_SERVICE);
+                (AppOpsManager) TelecomApp.getInstance().getSystemService(Context.APP_OPS_SERVICE);
 
         publish();
     }
@@ -143,11 +143,11 @@
      * Initialize the singleton TelecommServiceImpl instance.
      * This is only done once, at startup, from TelecommApp.onCreate().
      */
-    static TelecommServiceImpl init(
+    static TelecomServiceImpl init(
             MissedCallNotifier missedCallNotifier, PhoneAccountRegistrar phoneAccountRegistrar) {
-        synchronized (TelecommServiceImpl.class) {
+        synchronized (TelecomServiceImpl.class) {
             if (sInstance == null) {
-                sInstance = new TelecommServiceImpl(missedCallNotifier, phoneAccountRegistrar);
+                sInstance = new TelecomServiceImpl(missedCallNotifier, phoneAccountRegistrar);
             } else {
                 Log.wtf(TAG, "init() called multiple times!  sInstance %s", sInstance);
             }
@@ -156,7 +156,7 @@
     }
 
     //
-    // Implementation of the ITelecommService interface.
+    // Implementation of the ITelecomService interface.
     //
 
     @Override
@@ -354,7 +354,7 @@
     }
 
     /**
-     * @see TelecommManager#silenceRinger
+     * @see android.telecom.TelecomManager#silenceRinger
      */
     @Override
     public void silenceRinger() {
@@ -364,18 +364,18 @@
     }
 
     /**
-     * @see TelecommManager#getDefaultPhoneApp
+     * @see android.telecom.TelecomManager#getDefaultPhoneApp
      */
     @Override
     public ComponentName getDefaultPhoneApp() {
-        Resources resources = TelecommApp.getInstance().getResources();
+        Resources resources = TelecomApp.getInstance().getResources();
         return new ComponentName(
                 resources.getString(R.string.ui_default_package),
                 resources.getString(R.string.dialer_default_class));
     }
 
     /**
-     * @see TelecommManager#isInCall
+     * @see android.telecom.TelecomManager#isInCall
      */
     @Override
     public boolean isInCall() {
@@ -386,7 +386,7 @@
     }
 
     /**
-     * @see TelecommManager#isRinging
+     * @see android.telecom.TelecomManager#isRinging
      */
     @Override
     public boolean isRinging() {
@@ -395,7 +395,7 @@
     }
 
     /**
-     * @see TelecommManager#endCall
+     * @see android.telecom.TelecomManager#endCall
      */
     @Override
     public boolean endCall() {
@@ -404,7 +404,7 @@
     }
 
     /**
-     * @see TelecommManager#acceptRingingCall
+     * @see android.telecom.TelecomManager#acceptRingingCall
      */
     @Override
     public void acceptRingingCall() {
@@ -413,7 +413,7 @@
     }
 
     /**
-     * @see TelecommManager#showInCallScreen
+     * @see android.telecom.TelecomManager#showInCallScreen
      */
     @Override
     public void showInCallScreen(boolean showDialpad) {
@@ -422,7 +422,7 @@
     }
 
     /**
-     * @see TelecommManager#cancelMissedCallsNotification
+     * @see android.telecom.TelecomManager#cancelMissedCallsNotification
      */
     @Override
     public void cancelMissedCallsNotification() {
@@ -431,13 +431,13 @@
     }
 
     /**
-     * @see TelecommManager#handleMmi
+     * @see android.telecom.TelecomManager#handleMmi
      */
     @Override
     public boolean handlePinMmi(String dialString) {
         enforceModifyPermissionOrDefaultDialer();
 
-        // Switch identity so that TelephonyManager checks Telecomm's permissions instead.
+        // Switch identity so that TelephonyManager checks Telecom's permissions instead.
         long token = Binder.clearCallingIdentity();
         boolean retval = getTelephonyManager().handlePinMmi(dialString);
         Binder.restoreCallingIdentity(token);
@@ -446,7 +446,7 @@
     }
 
     /**
-     * @see TelecommManager#isTtySupported
+     * @see android.telecom.TelecomManager#isTtySupported
      */
     @Override
     public boolean isTtySupported() {
@@ -455,7 +455,7 @@
     }
 
     /**
-     * @see TelecommManager#getCurrentTtyMode
+     * @see android.telecom.TelecomManager#getCurrentTtyMode
      */
     @Override
     public int getCurrentTtyMode() {
@@ -464,7 +464,7 @@
     }
 
     /**
-     * @see TelecommManager#addNewIncomingCall
+     * @see android.telecom.TelecomManager#addNewIncomingCall
      */
     @Override
     public void addNewIncomingCall(PhoneAccountHandle phoneAccountHandle, Bundle extras) {
@@ -472,22 +472,22 @@
             mAppOpsManager.checkPackage(
                     Binder.getCallingUid(), phoneAccountHandle.getComponentName().getPackageName());
 
-            Intent intent = new Intent(TelecommManager.ACTION_INCOMING_CALL);
-            intent.setPackage(TelecommApp.getInstance().getPackageName());
+            Intent intent = new Intent(TelecomManager.ACTION_INCOMING_CALL);
+            intent.setPackage(TelecomApp.getInstance().getPackageName());
             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            intent.putExtra(TelecommManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+            intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
             if (extras != null) {
-                intent.putExtra(TelecommManager.EXTRA_INCOMING_CALL_EXTRAS, extras);
+                intent.putExtra(TelecomManager.EXTRA_INCOMING_CALL_EXTRAS, extras);
             }
 
             long token = Binder.clearCallingIdentity();
-            TelecommApp.getInstance().startActivityAsUser(intent, UserHandle.CURRENT);
+            TelecomApp.getInstance().startActivityAsUser(intent, UserHandle.CURRENT);
             Binder.restoreCallingIdentity(token);
         }
     }
 
     //
-    // Supporting methods for the ITelecommService interface implementation.
+    // Supporting methods for the ITelecomService interface implementation.
     //
 
     private void acceptRingingCallInternal() {
@@ -527,7 +527,7 @@
      * @throws SecurityException if the caller does not have the required permission
      */
     private void enforceModifyPermission() {
-        TelecommApp.getInstance().enforceCallingOrSelfPermission(
+        TelecomApp.getInstance().enforceCallingOrSelfPermission(
                 android.Manifest.permission.MODIFY_PHONE_STATE, null);
     }
 
@@ -538,12 +538,12 @@
     }
 
     private void enforceRegisterProviderOrSubscriptionPermission() {
-        TelecommApp.getInstance().enforceCallingOrSelfPermission(
+        TelecomApp.getInstance().enforceCallingOrSelfPermission(
                 REGISTER_PROVIDER_OR_SUBSCRIPTION, null);
     }
 
     private void enforceModifyPermissionOrCallingPackage(String packageName) {
-        // TODO: Use a new telecomm permission for this instead of reusing modify.
+        // TODO: Use a new telecom permission for this instead of reusing modify.
         try {
             enforceModifyPermission();
         } catch (SecurityException e) {
@@ -552,7 +552,7 @@
     }
 
     private void enforceReadPermission() {
-        TelecommApp.getInstance().enforceCallingOrSelfPermission(
+        TelecomApp.getInstance().enforceCallingOrSelfPermission(
                 android.Manifest.permission.READ_PHONE_STATE, null);
     }
 
@@ -582,7 +582,7 @@
 
     private TelephonyManager getTelephonyManager() {
         return (TelephonyManager)
-                TelecommApp.getInstance().getSystemService(Context.TELEPHONY_SERVICE);
+                TelecomApp.getInstance().getSystemService(Context.TELEPHONY_SERVICE);
     }
 
     private void publish() {
diff --git a/src/com/android/telecomm/TelephonyUtil.java b/src/com/android/server/telecom/TelephonyUtil.java
similarity index 97%
rename from src/com/android/telecomm/TelephonyUtil.java
rename to src/com/android/server/telecom/TelephonyUtil.java
index 2d22491..29b6f89 100644
--- a/src/com/android/telecomm/TelephonyUtil.java
+++ b/src/com/android/server/telecom/TelephonyUtil.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.ComponentName;
 import android.content.Context;
diff --git a/src/com/android/telecomm/ThreadUtil.java b/src/com/android/server/telecom/ThreadUtil.java
similarity index 97%
rename from src/com/android/telecomm/ThreadUtil.java
rename to src/com/android/server/telecom/ThreadUtil.java
index 35b4c29..650e73f 100644
--- a/src/com/android/telecomm/ThreadUtil.java
+++ b/src/com/android/server/telecom/ThreadUtil.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.os.Looper;
 
diff --git a/src/com/android/telecomm/Timeouts.java b/src/com/android/server/telecom/Timeouts.java
similarity index 91%
rename from src/com/android/telecomm/Timeouts.java
rename to src/com/android/server/telecom/Timeouts.java
index 3ff0575..4434db4 100644
--- a/src/com/android/telecomm/Timeouts.java
+++ b/src/com/android/server/telecom/Timeouts.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.provider.Settings;
 
@@ -26,7 +26,7 @@
  */
 public final class Timeouts {
     /** A prefix to use for all keys so to not clobber the global namespace. */
-    private static final String PREFIX = "telecomm.";
+    private static final String PREFIX = "telecom.";
 
     private Timeouts() {}
 
@@ -40,7 +40,7 @@
      */
     private static long get(String key, long defaultValue) {
         return Settings.Secure.getLong(
-                TelecommApp.getInstance().getContentResolver(), PREFIX + key, defaultValue);
+                TelecomApp.getInstance().getContentResolver(), PREFIX + key, defaultValue);
     }
 
     /**
diff --git a/src/com/android/telecomm/TtyManager.java b/src/com/android/server/telecom/TtyManager.java
similarity index 79%
rename from src/com/android/telecomm/TtyManager.java
rename to src/com/android/server/telecom/TtyManager.java
index 71a1c33..945da5e 100644
--- a/src/com/android/telecomm/TtyManager.java
+++ b/src/com/android/server/telecom/TtyManager.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -23,14 +23,14 @@
 import android.media.AudioManager;
 import android.os.UserHandle;
 import android.provider.Settings;
-import android.telecomm.TelecommManager;
+import android.telecom.TelecomManager;
 
 final class TtyManager implements WiredHeadsetManager.Listener {
     private final TtyBroadcastReceiver mReceiver = new TtyBroadcastReceiver();
     private final Context mContext;
     private final WiredHeadsetManager mWiredHeadsetManager;
-    private int mPreferredTtyMode = TelecommManager.TTY_MODE_OFF;
-    private int mCurrentTtyMode = TelecommManager.TTY_MODE_OFF;
+    private int mPreferredTtyMode = TelecomManager.TTY_MODE_OFF;
+    private int mCurrentTtyMode = TelecomManager.TTY_MODE_OFF;
 
     TtyManager(Context context, WiredHeadsetManager wiredHeadsetManager) {
         mContext = context;
@@ -40,10 +40,10 @@
         mPreferredTtyMode = Settings.Secure.getInt(
                 mContext.getContentResolver(),
                 Settings.Secure.PREFERRED_TTY_MODE,
-                TelecommManager.TTY_MODE_OFF);
+                TelecomManager.TTY_MODE_OFF);
 
         IntentFilter intentFilter = new IntentFilter(
-                TelecommManager.ACTION_TTY_PREFERRED_MODE_CHANGED);
+                TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED);
         mContext.registerReceiver(mReceiver, intentFilter);
 
         updateCurrentTtyMode();
@@ -66,7 +66,7 @@
     }
 
     private void updateCurrentTtyMode() {
-        int newTtyMode = TelecommManager.TTY_MODE_OFF;
+        int newTtyMode = TelecomManager.TTY_MODE_OFF;
         if (isTtySupported() && mWiredHeadsetManager.isPluggedIn()) {
             newTtyMode = mPreferredTtyMode;
         }
@@ -74,8 +74,8 @@
 
         if (mCurrentTtyMode != newTtyMode) {
             mCurrentTtyMode = newTtyMode;
-            Intent ttyModeChanged = new Intent(TelecommManager.ACTION_CURRENT_TTY_MODE_CHANGED);
-            ttyModeChanged.putExtra(TelecommManager.EXTRA_CURRENT_TTY_MODE, mCurrentTtyMode);
+            Intent ttyModeChanged = new Intent(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED);
+            ttyModeChanged.putExtra(TelecomManager.EXTRA_CURRENT_TTY_MODE, mCurrentTtyMode);
             mContext.sendBroadcastAsUser(ttyModeChanged, UserHandle.ALL);
 
             updateAudioTtyMode();
@@ -85,16 +85,16 @@
     private void updateAudioTtyMode() {
         String audioTtyMode;
         switch (mCurrentTtyMode) {
-            case TelecommManager.TTY_MODE_FULL:
+            case TelecomManager.TTY_MODE_FULL:
                 audioTtyMode = "tty_full";
                 break;
-            case TelecommManager.TTY_MODE_VCO:
+            case TelecomManager.TTY_MODE_VCO:
                 audioTtyMode = "tty_vco";
                 break;
-            case TelecommManager.TTY_MODE_HCO:
+            case TelecomManager.TTY_MODE_HCO:
                 audioTtyMode = "tty_hco";
                 break;
-            case TelecommManager.TTY_MODE_OFF:
+            case TelecomManager.TTY_MODE_OFF:
             default:
                 audioTtyMode = "tty_off";
                 break;
@@ -110,9 +110,9 @@
         public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
             Log.v(TtyManager.this, "onReceive, action: %s", action);
-            if (action.equals(TelecommManager.ACTION_TTY_PREFERRED_MODE_CHANGED)) {
+            if (action.equals(TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED)) {
                 int newPreferredTtyMode = intent.getIntExtra(
-                        TelecommManager.EXTRA_TTY_PREFERRED_MODE, TelecommManager.TTY_MODE_OFF);
+                        TelecomManager.EXTRA_TTY_PREFERRED_MODE, TelecomManager.TTY_MODE_OFF);
                 if (mPreferredTtyMode != newPreferredTtyMode) {
                     mPreferredTtyMode = newPreferredTtyMode;
                     updateCurrentTtyMode();
diff --git a/src/com/android/telecomm/WiredHeadsetManager.java b/src/com/android/server/telecom/WiredHeadsetManager.java
similarity index 98%
rename from src/com/android/telecomm/WiredHeadsetManager.java
rename to src/com/android/server/telecom/WiredHeadsetManager.java
index aa2bbd1..8ce7b61 100644
--- a/src/com/android/telecomm/WiredHeadsetManager.java
+++ b/src/com/android/server/telecom/WiredHeadsetManager.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.telecomm;
+package com.android.server.telecom;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
