diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index 36eae30..79b754a 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -71,7 +71,7 @@
         void onFailedOutgoingCall(Call call, int errorCode, String errorMsg);
         void onSuccessfulIncomingCall(Call call);
         void onFailedIncomingCall(Call call);
-        void onRequestingRingback(Call call, boolean requestingRingback);
+        void onRingbackRequested(Call call, boolean ringbackRequested);
         void onPostDialWait(Call call, String remaining);
         void onCallCapabilitiesChanged(Call call);
         void onParentChanged(Call call);
@@ -79,7 +79,7 @@
         void onCannedSmsResponsesLoaded(Call call);
         void onVideoCallProviderChanged(Call call);
         void onCallerInfoChanged(Call call);
-        void onAudioModeIsVoipChanged(Call call);
+        void onIsVoipAudioModeChanged(Call call);
         void onStatusHintsChanged(Call call);
         void onHandleChanged(Call call);
         void onCallerDisplayNameChanged(Call call);
@@ -100,7 +100,7 @@
         @Override
         public void onFailedIncomingCall(Call call) {}
         @Override
-        public void onRequestingRingback(Call call, boolean requestingRingback) {}
+        public void onRingbackRequested(Call call, boolean ringbackRequested) {}
         @Override
         public void onPostDialWait(Call call, String remaining) {}
         @Override
@@ -116,7 +116,7 @@
         @Override
         public void onCallerInfoChanged(Call call) {}
         @Override
-        public void onAudioModeIsVoipChanged(Call call) {}
+        public void onIsVoipAudioModeChanged(Call call) {}
         @Override
         public void onStatusHintsChanged(Call call) {}
         @Override
@@ -260,7 +260,7 @@
     private int mQueryToken = 0;
 
     /** Whether this call is requesting that Telecomm play the ringback tone on its behalf. */
-    private boolean mRequestingRingback = false;
+    private boolean mRingbackRequested = false;
 
     /** Whether direct-to-voicemail query is pending. */
     private boolean mDirectToVoicemailQueryPending;
@@ -281,7 +281,7 @@
 
     private IVideoProvider mVideoProvider;
 
-    private boolean mAudioModeIsVoip;
+    private boolean mIsVoipAudioMode;
     private StatusHints mStatusHints;
     private final ConnectionServiceRepository mRepository;
 
@@ -361,15 +361,15 @@
         }
     }
 
-    void setRequestingRingback(boolean requestingRingback) {
-        mRequestingRingback = requestingRingback;
+    void setRingbackRequested(boolean ringbackRequested) {
+        mRingbackRequested = ringbackRequested;
         for (Listener l : mListeners) {
-            l.onRequestingRingback(this, mRequestingRingback);
+            l.onRingbackRequested(this, mRingbackRequested);
         }
     }
 
-    boolean isRequestingRingback() {
-        return mRequestingRingback;
+    boolean isRingbackRequested() {
+        return mRingbackRequested;
     }
 
     boolean isConference() {
@@ -632,8 +632,8 @@
         setCallCapabilities(connection.getCapabilities());
         setVideoProvider(connection.getVideoProvider());
         setVideoState(connection.getVideoState());
-        setRequestingRingback(connection.isRequestingRingback());
-        setAudioModeIsVoip(connection.getAudioModeIsVoip());
+        setRingbackRequested(connection.isRingbackRequested());
+        setIsVoipAudioMode(connection.getIsVoipAudioMode());
         setStatusHints(connection.getStatusHints());
 
         mConferenceableCalls.clear();
@@ -1190,14 +1190,14 @@
         }
     }
 
-    public boolean getAudioModeIsVoip() {
-        return mAudioModeIsVoip;
+    public boolean getIsVoipAudioMode() {
+        return mIsVoipAudioMode;
     }
 
-    public void setAudioModeIsVoip(boolean audioModeIsVoip) {
-        mAudioModeIsVoip = audioModeIsVoip;
+    public void setIsVoipAudioMode(boolean audioModeIsVoip) {
+        mIsVoipAudioMode = audioModeIsVoip;
         for (Listener l : mListeners) {
-            l.onAudioModeIsVoipChanged(this);
+            l.onIsVoipAudioModeChanged(this);
         }
     }
 
diff --git a/src/com/android/telecomm/CallAudioManager.java b/src/com/android/telecomm/CallAudioManager.java
index 164bedb..c02e96d 100644
--- a/src/com/android/telecomm/CallAudioManager.java
+++ b/src/com/android/telecomm/CallAudioManager.java
@@ -114,7 +114,7 @@
     }
 
     @Override
-    public void onAudioModeIsVoipChanged(Call call) {
+    public void onIsVoipAudioModeChanged(Call call) {
         updateAudioStreamAndMode();
     }
 
@@ -331,7 +331,7 @@
         } else {
             Call call = getForegroundCall();
             if (call != null) {
-                int mode = call.getAudioModeIsVoip() ?
+                int mode = call.getIsVoipAudioMode() ?
                         AudioManager.MODE_IN_COMMUNICATION : AudioManager.MODE_IN_CALL;
                 requestAudioFocusAndSetMode(AudioManager.STREAM_VOICE_CALL, mode);
             } else if (mIsTonePlaying) {
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 546c847..2be03c5 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -55,9 +55,9 @@
         void onIncomingCallRejected(Call call, boolean rejectWithMessage, String textMessage);
         void onForegroundCallChanged(Call oldForegroundCall, Call newForegroundCall);
         void onAudioStateChanged(AudioState oldAudioState, AudioState newAudioState);
-        void onRequestingRingback(Call call, boolean ringback);
+        void onRingbackRequested(Call call, boolean ringback);
         void onIsConferencedChanged(Call call);
-        void onAudioModeIsVoipChanged(Call call);
+        void onIsVoipAudioModeChanged(Call call);
         void onVideoStateChanged(Call call);
     }
 
@@ -171,9 +171,9 @@
     }
 
     @Override
-    public void onRequestingRingback(Call call, boolean ringback) {
+    public void onRingbackRequested(Call call, boolean ringback) {
         for (CallsManagerListener listener : mListeners) {
-            listener.onRequestingRingback(call, ringback);
+            listener.onRingbackRequested(call, ringback);
         }
     }
 
@@ -197,9 +197,9 @@
     }
 
     @Override
-    public void onAudioModeIsVoipChanged(Call call) {
+    public void onIsVoipAudioModeChanged(Call call) {
         for (CallsManagerListener listener : mListeners) {
-            listener.onAudioModeIsVoipChanged(call);
+            listener.onIsVoipAudioModeChanged(call);
         }
     }
 
diff --git a/src/com/android/telecomm/CallsManagerListenerBase.java b/src/com/android/telecomm/CallsManagerListenerBase.java
index 65ce4ac..8437e29 100644
--- a/src/com/android/telecomm/CallsManagerListenerBase.java
+++ b/src/com/android/telecomm/CallsManagerListenerBase.java
@@ -59,7 +59,7 @@
     }
 
     @Override
-    public void onRequestingRingback(Call call, boolean ringback) {
+    public void onRingbackRequested(Call call, boolean ringback) {
     }
 
     @Override
@@ -67,7 +67,7 @@
     }
 
     @Override
-    public void onAudioModeIsVoipChanged(Call call) {
+    public void onIsVoipAudioModeChanged(Call call) {
     }
 
     @Override
diff --git a/src/com/android/telecomm/ConnectionServiceWrapper.java b/src/com/android/telecomm/ConnectionServiceWrapper.java
index 93211dc..5c678ff 100644
--- a/src/com/android/telecomm/ConnectionServiceWrapper.java
+++ b/src/com/android/telecomm/ConnectionServiceWrapper.java
@@ -65,7 +65,7 @@
     private static final int MSG_SET_DIALING = 4;
     private static final int MSG_SET_DISCONNECTED = 5;
     private static final int MSG_SET_ON_HOLD = 6;
-    private static final int MSG_SET_REQUESTING_RINGBACK = 7;
+    private static final int MSG_SET_RINGBACK_REQUESTED = 7;
     private static final int MSG_SET_CALL_CAPABILITIES = 8;
     private static final int MSG_SET_IS_CONFERENCED = 9;
     private static final int MSG_ADD_CONFERENCE_CALL = 10;
@@ -73,9 +73,9 @@
     private static final int MSG_ON_POST_DIAL_WAIT = 12;
     private static final int MSG_QUERY_REMOTE_CALL_SERVICES = 13;
     private static final int MSG_SET_VIDEO_PROVIDER = 14;
-    private static final int MSG_SET_AUDIO_MODE_IS_VOIP = 15;
+    private static final int MSG_SET_IS_VOIP_AUDIO_MODE = 15;
     private static final int MSG_SET_STATUS_HINTS = 16;
-    private static final int MSG_SET_HANDLE = 17;
+    private static final int MSG_SET_ADDRESS = 17;
     private static final int MSG_SET_CALLER_DISPLAY_NAME = 18;
     private static final int MSG_SET_VIDEO_STATE = 19;
     private static final int MSG_SET_CONFERENCEABLE_CONNECTIONS = 20;
@@ -147,10 +147,10 @@
                         //Log.w(this, "setOnHold, unknown call id: %s", msg.obj);
                     }
                     break;
-                case MSG_SET_REQUESTING_RINGBACK: {
+                case MSG_SET_RINGBACK_REQUESTED: {
                     call = mCallIdMapper.getCall(msg.obj);
                     if (call != null) {
-                        call.setRequestingRingback(msg.arg1 == 1);
+                        call.setRingbackRequested(msg.arg1 == 1);
                     } else {
                         //Log.w(this, "setRingback, unknown call id: %s", args.arg1);
                     }
@@ -263,10 +263,10 @@
                     }
                     break;
                 }
-                case MSG_SET_AUDIO_MODE_IS_VOIP: {
+                case MSG_SET_IS_VOIP_AUDIO_MODE: {
                     call = mCallIdMapper.getCall(msg.obj);
                     if (call != null) {
-                        call.setAudioModeIsVoip(msg.arg1 == 1);
+                        call.setIsVoipAudioMode(msg.arg1 == 1);
                     }
                     break;
                 }
@@ -283,7 +283,7 @@
                     }
                     break;
                 }
-                case MSG_SET_HANDLE: {
+                case MSG_SET_ADDRESS: {
                     SomeArgs args = (SomeArgs) msg.obj;
                     try {
                         call = mCallIdMapper.getCall(args.arg1);
@@ -416,10 +416,10 @@
         }
 
         @Override
-        public void setRequestingRingback(String callId, boolean ringback) {
-            logIncoming("setRequestingRingback %s %b", callId, ringback);
+        public void setRingbackRequested(String callId, boolean ringback) {
+            logIncoming("setRingbackRequested %s %b", callId, ringback);
             if (mCallIdMapper.isValidCallId(callId)) {
-                mHandler.obtainMessage(MSG_SET_REQUESTING_RINGBACK, ringback ? 1 : 0, 0, callId)
+                mHandler.obtainMessage(MSG_SET_RINGBACK_REQUESTED, ringback ? 1 : 0, 0, callId)
                         .sendToTarget();
             }
         }
@@ -492,10 +492,10 @@
         }
 
         @Override
-        public void setAudioModeIsVoip(String callId, boolean isVoip) {
-            logIncoming("setAudioModeIsVoip %s %b", callId, isVoip);
+        public void setIsVoipAudioMode(String callId, boolean isVoip) {
+            logIncoming("setIsVoipAudioMode %s %b", callId, isVoip);
             if (mCallIdMapper.isValidCallId(callId)) {
-                mHandler.obtainMessage(MSG_SET_AUDIO_MODE_IS_VOIP, isVoip ? 1 : 0, 0,
+                mHandler.obtainMessage(MSG_SET_IS_VOIP_AUDIO_MODE, isVoip ? 1 : 0, 0,
                         callId).sendToTarget();
             }
         }
@@ -512,14 +512,14 @@
         }
 
         @Override
-        public void setHandle(String callId, Uri handle, int presentation) {
-            logIncoming("setHandle %s %s %d", callId, handle, presentation);
+        public void setAddress(String callId, Uri address, int presentation) {
+            logIncoming("setAddress %s %s %d", callId, address, presentation);
             if (mCallIdMapper.isValidCallId(callId)) {
                 SomeArgs args = SomeArgs.obtain();
                 args.arg1 = callId;
-                args.arg2 = handle;
+                args.arg2 = address;
                 args.argi1 = presentation;
-                mHandler.obtainMessage(MSG_SET_HANDLE, args).sendToTarget();
+                mHandler.obtainMessage(MSG_SET_ADDRESS, args).sendToTarget();
             }
         }
 
diff --git a/src/com/android/telecomm/RingbackPlayer.java b/src/com/android/telecomm/RingbackPlayer.java
index bfd5f62..645844a 100644
--- a/src/com/android/telecomm/RingbackPlayer.java
+++ b/src/com/android/telecomm/RingbackPlayer.java
@@ -74,7 +74,7 @@
     }
 
     @Override
-    public void onRequestingRingback(Call call, boolean ignored) {
+    public void onRingbackRequested(Call call, boolean ignored) {
         if (shouldStartRinging(call)) {
             startRingbackForCall(call);
         } else {
@@ -137,6 +137,6 @@
         return call != null
                 && mCallsManager.getForegroundCall() == call
                 && call.getState() == CallState.DIALING
-                && call.isRequestingRingback();
+                && call.isRingbackRequested();
     }
 }
diff --git a/tests/src/com/android/telecomm/testapps/TestConnectionManager.java b/tests/src/com/android/telecomm/testapps/TestConnectionManager.java
index c34485a..256d119 100644
--- a/tests/src/com/android/telecomm/testapps/TestConnectionManager.java
+++ b/tests/src/com/android/telecomm/testapps/TestConnectionManager.java
@@ -40,7 +40,7 @@
  */
 public class TestConnectionManager extends ConnectionService {
     public final class TestManagedConnection extends Connection {
-        private final RemoteConnection.Listener mRemoteListener = new RemoteConnection.Listener() {
+        private final RemoteConnection.Callback mRemoteCallback = new RemoteConnection.Callback() {
             @Override
             public void onStateChanged(RemoteConnection connection, int state) {
                 setState(state);
@@ -53,8 +53,8 @@
             }
 
             @Override
-            public void onRequestingRingback(RemoteConnection connection, boolean ringback) {
-                setRequestingRingback(ringback);
+            public void onRingbackRequested(RemoteConnection connection, boolean ringback) {
+                setRingbackRequested(ringback);
             }
 
             @Override
@@ -69,7 +69,7 @@
             }
 
             @Override
-            public void onAudioModeIsVoipChanged(RemoteConnection connection, boolean isVoip) {
+            public void onVoipAudioChanged(RemoteConnection connection, boolean isVoip) {
                 setAudioModeIsVoip(isVoip);
             }
 
@@ -87,8 +87,9 @@
             }
 
             @Override
-            public void onHandleChanged(RemoteConnection connection, Uri handle, int presentation) {
-                setHandle(handle, presentation);
+            public void onAddressChanged(
+                    RemoteConnection connection, Uri address, int presentation) {
+                setAddress(address, presentation);
             }
 
             @Override
@@ -123,7 +124,7 @@
         TestManagedConnection(RemoteConnection remote, boolean isIncoming) {
             mRemote = remote;
             mIsIncoming = isIncoming;
-            mRemote.addListener(mRemoteListener);
+            mRemote.registerCallback(mRemoteCallback);
             setState(mRemote.getState());
             setVideoState(mRemote.getVideoState());
         }
@@ -249,7 +250,7 @@
             @Override
             public void onDestroyed(RemoteConference conference) {
                 destroy();
-                mRemote.removeCallback(mRemoteCallback);
+                mRemote.unregisterCallback(mRemoteCallback);
                 mManagedConferenceByRemote.remove(mRemote);
             }
         };
@@ -259,7 +260,7 @@
         public TestManagedConference(RemoteConference remote) {
             super(null);
             mRemote = remote;
-            remote.addCallback(mRemoteCallback);
+            remote.registerCallback(mRemoteCallback);
             setActive();
             for (RemoteConnection r : remote.getConnections()) {
                 TestManagedConnection c = mManagedConnectionByRemote.get(r);
diff --git a/tests/src/com/android/telecomm/testapps/TestConnectionService.java b/tests/src/com/android/telecomm/testapps/TestConnectionService.java
index 89bd8a9..d35d789 100644
--- a/tests/src/com/android/telecomm/testapps/TestConnectionService.java
+++ b/tests/src/com/android/telecomm/testapps/TestConnectionService.java
@@ -310,7 +310,7 @@
             Uri providedHandle = extras.getParcelable(EXTRA_HANDLE);
 
             // Use dummy number for testing incoming calls.
-            Uri handle = providedHandle == null ?
+            Uri address = providedHandle == null ?
                     Uri.fromParts(PhoneAccount.SCHEME_TEL, getDummyNumber(isVideoCall), null)
                     : providedHandle;
             if (isVideoCall) {
@@ -326,13 +326,13 @@
                     VideoProfile.VideoState.BIDIRECTIONAL :
                     VideoProfile.VideoState.AUDIO_ONLY;
             connection.setVideoState(videoState);
-            connection.setHandle(handle, TelecommManager.PRESENTATION_ALLOWED);
+            connection.setAddress(address, TelecommManager.PRESENTATION_ALLOWED);
 
             addCall(connection);
 
             ConnectionRequest newRequest = new ConnectionRequest(
                     request.getAccountHandle(),
-                    handle,
+                    address,
                     request.getExtras(),
                     videoState);
             connection.setVideoState(videoState);
