diff --git a/sip/src/com/android/services/telephony/sip/SipConnectionService.java b/sip/src/com/android/services/telephony/sip/SipConnectionService.java
index f2bd120..a1a6b6a 100644
--- a/sip/src/com/android/services/telephony/sip/SipConnectionService.java
+++ b/sip/src/com/android/services/telephony/sip/SipConnectionService.java
@@ -206,7 +206,7 @@
     private ConnectionRequest getConnectionRequestForIncomingCall(ConnectionRequest request,
             com.android.internal.telephony.Connection connection) {
         Uri uri = Uri.fromParts(SipUtil.SCHEME_SIP, connection.getAddress(), null);
-        return new ConnectionRequest(request.getAccount(), request.getCallId(), uri,
+        return new ConnectionRequest(request.getAccountHandle(), request.getCallId(), uri,
                 connection.getNumberPresentation(), request.getExtras(), 0);
     }
 
diff --git a/src/com/android/services/telephony/TelecommAccountRegistry.java b/src/com/android/services/telephony/TelecommAccountRegistry.java
index ff475d5..0ab76d9 100644
--- a/src/com/android/services/telephony/TelecommAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecommAccountRegistry.java
@@ -19,8 +19,8 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.net.Uri;
+import android.telecomm.PhoneAccount;
 import android.telecomm.PhoneAccountHandle;
-import android.telecomm.PhoneAccountMetadata;
 import android.telecomm.TelecommManager;
 import android.telephony.TelephonyManager;
 
@@ -38,19 +38,19 @@
 final class TelecommAccountRegistry {
     private final class AccountEntry {
         private final Phone mPhone;
-        private final PhoneAccountMetadata mMetadata;
+        private final PhoneAccount mAccount;
         private final PstnIncomingCallNotifier mIncomingCallNotifier;
 
         AccountEntry(Phone phone, boolean isDummy) {
             mPhone = phone;
-            mMetadata = registerPstnPhoneAccount(isDummy);
+            mAccount = registerPstnPhoneAccount(isDummy);
             mIncomingCallNotifier = new PstnIncomingCallNotifier((PhoneProxy) mPhone);
         }
 
         /**
          * Registers the specified account with Telecomm as a PhoneAccountHandle.
          */
-        private PhoneAccountMetadata registerPstnPhoneAccount(boolean isDummyAccount) {
+        private PhoneAccount registerPstnPhoneAccount(boolean isDummyAccount) {
             TelephonyManager telephonyManager = TelephonyManager.from(mContext);
             String dummyPrefix = isDummyAccount ? "Dummy " : "";
 
@@ -62,20 +62,20 @@
             // Populate the phone account data.
             long subId = mPhone.getSubId();
             int slotId = mPhone.getPhoneId() + 1;
-            PhoneAccountMetadata metadata = new PhoneAccountMetadata(
+            PhoneAccount account = new PhoneAccount(
                     phoneAccountHandle,
                     Uri.fromParts(TEL_SCHEME, telephonyManager.getLine1Number(subId), null),
                     mPhone.getPhoneSubInfo().getLine1Number(),
-                    PhoneAccountMetadata.CAPABILITY_SIM_SUBSCRIPTION |
-                            PhoneAccountMetadata.CAPABILITY_CALL_PROVIDER,
+                    PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION |
+                            PhoneAccount.CAPABILITY_CALL_PROVIDER,
                     com.android.phone.R.mipmap.ic_launcher_phone,
                     dummyPrefix + "SIM " + slotId,
                     dummyPrefix + "SIM card in slot " + slotId,
                     true /* supportsVideoCalling */);
 
             // Register with Telecomm and put into the account entry.
-            mTelecommManager.registerPhoneAccount(metadata);
-            return metadata;
+            mTelecommManager.registerPhoneAccount(account);
+            return account;
         }
     }
 
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index a256780..9f76207 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -82,7 +82,7 @@
         }
 
         // Get the right phone object from the account data passed in.
-        final Phone phone = getPhoneForAccount(request.getAccount());
+        final Phone phone = getPhoneForAccount(request.getAccountHandle());
         if (phone == null) {
             Log.d(this, "onCreateOutgoingConnection, phone is null");
             response.onFailure(request, DisconnectCause.ERROR_UNSPECIFIED, "Phone is null");
@@ -160,7 +160,7 @@
             CreateConnectionResponse<Connection> response) {
         Log.v(this, "onCreateIncomingConnection, request: " + request);
 
-        Phone phone = getPhoneForAccount(request.getAccount());
+        Phone phone = getPhoneForAccount(request.getAccountHandle());
         if (phone == null) {
             response.onFailure(request, DisconnectCause.ERROR_UNSPECIFIED, null);
             return;
@@ -182,7 +182,7 @@
 
         Uri handle = getHandleFromAddress(originalConnection.getAddress());
         ConnectionRequest telephonyRequest = new ConnectionRequest(
-                request.getAccount(),
+                request.getAccountHandle(),
                 request.getCallId(),
                 handle,
                 originalConnection.getNumberPresentation(),
@@ -242,7 +242,7 @@
         }
 
         ConnectionRequest telephonyRequest = new ConnectionRequest(
-                request.getAccount(),
+                request.getAccountHandle(),
                 request.getCallId(),
                 request.getHandle(),
                 request.getHandlePresentation(),
