diff --git a/InCallUI/res/values/strings.xml b/InCallUI/res/values/strings.xml
index cfe3d41..b8a84c7 100644
--- a/InCallUI/res/values/strings.xml
+++ b/InCallUI/res/values/strings.xml
@@ -447,17 +447,6 @@
     <!-- This can be used in any application wanting to disable the text "Emergency number" -->
     <string name="emergency_call_dialog_number_for_display">Emergency number</string>
 
-    <!-- STOPSHIP These strings are for debugging only -->
-    <!-- Call substate label -->
-    <string name="call_substate_label" translatable="false">Call substate - \u000a</string>
-    <!-- Call substate label for call resumed -->
-    <string name="call_substate_call_resumed" translatable="false">Resumed \u000a</string>
-    <!-- Call substate label for call connected suspended (audio) -->
-    <string name="call_substate_connected_suspended_audio" translatable="false">Connected Suspended (Audio) \u000a</string>
-    <!-- Call substate label for call connected suspended (video) -->
-    <string name="call_substate_connected_suspended_video" translatable="false">Connected Suspended (Video) \u000a</string>
-    <!-- Call substate label for avp retry -->
-    <string name="call_substate_avp_retry" translatable="false">Avp Retry \u000a</string>
     <!-- Video quality changed message -->
     <string name="video_quality_changed" translatable="false">Video quality changed to \u0020</string>
     <!-- Video quality High -->
diff --git a/InCallUI/src/com/android/incallui/Call.java b/InCallUI/src/com/android/incallui/Call.java
index 4ed7a49..e26c047 100644
--- a/InCallUI/src/com/android/incallui/Call.java
+++ b/InCallUI/src/com/android/incallui/Call.java
@@ -172,11 +172,11 @@
     private static final String ID_PREFIX = Call.class.getSimpleName() + "_";
     private static int sIdCounter = 0;
 
-    private android.telecom.Call.Listener mTelecommCallListener =
-            new android.telecom.Call.Listener() {
+    private android.telecom.Call.Callback mTelecomCallCallback =
+            new android.telecom.Call.Callback() {
                 @Override
                 public void onStateChanged(android.telecom.Call call, int newState) {
-                    Log.d(this, "TelecommCallListener onStateChanged call=" + call + " newState="
+                    Log.d(this, "TelecommCallCallback onStateChanged call=" + call + " newState="
                             + newState);
                     update();
                 }
@@ -184,7 +184,7 @@
                 @Override
                 public void onParentChanged(android.telecom.Call call,
                         android.telecom.Call newParent) {
-                    Log.d(this, "TelecommCallListener onParentChanged call=" + call + " newParent="
+                    Log.d(this, "TelecommCallCallback onParentChanged call=" + call + " newParent="
                             + newParent);
                     update();
                 }
@@ -198,7 +198,7 @@
                 @Override
                 public void onDetailsChanged(android.telecom.Call call,
                         android.telecom.Call.Details details) {
-                    Log.d(this, "TelecommCallListener onStateChanged call=" + call + " details="
+                    Log.d(this, "TelecommCallCallback onStateChanged call=" + call + " details="
                             + details);
                     update();
                 }
@@ -206,7 +206,7 @@
                 @Override
                 public void onCannedTextResponsesLoaded(android.telecom.Call call,
                         List<String> cannedTextResponses) {
-                    Log.d(this, "TelecommCallListener onStateChanged call=" + call
+                    Log.d(this, "TelecommCallCallback onStateChanged call=" + call
                             + " cannedTextResponses=" + cannedTextResponses);
                     update();
                 }
@@ -214,7 +214,7 @@
                 @Override
                 public void onPostDialWait(android.telecom.Call call,
                         String remainingPostDialSequence) {
-                    Log.d(this, "TelecommCallListener onStateChanged call=" + call
+                    Log.d(this, "TelecommCallCallback onStateChanged call=" + call
                             + " remainingPostDialSequence=" + remainingPostDialSequence);
                     update();
                 }
@@ -222,15 +222,15 @@
                 @Override
                 public void onVideoCallChanged(android.telecom.Call call,
                         VideoCall videoCall) {
-                    Log.d(this, "TelecommCallListener onStateChanged call=" + call + " videoCall="
+                    Log.d(this, "TelecommCallCallback onStateChanged call=" + call + " videoCall="
                             + videoCall);
                     update();
                 }
 
                 @Override
                 public void onCallDestroyed(android.telecom.Call call) {
-                    Log.d(this, "TelecommCallListener onStateChanged call=" + call);
-                    call.removeListener(mTelecommCallListener);
+                    Log.d(this, "TelecommCallCallback onStateChanged call=" + call);
+                    call.unregisterCallback(mTelecomCallCallback);
                 }
 
                 @Override
@@ -252,7 +252,7 @@
      */
     private int mModifyToVideoState = VideoProfile.VideoState.AUDIO_ONLY;
 
-    private InCallVideoCallListener mVideoCallListener;
+    private InCallVideoCallCallback mVideoCallCallback;
 
     /**
      * Used only to create mock calls for testing
@@ -268,7 +268,7 @@
         mTelecommCall = telecommCall;
         mId = ID_PREFIX + Integer.toString(sIdCounter++);
         updateFromTelecommCall();
-        mTelecommCall.addListener(mTelecommCallListener);
+        mTelecommCall.registerCallback(mTelecomCallCallback);
     }
 
     public android.telecom.Call getTelecommCall() {
@@ -301,10 +301,10 @@
         setDisconnectCause(mTelecommCall.getDetails().getDisconnectCause());
 
         if (mTelecommCall.getVideoCall() != null) {
-            if (mVideoCallListener == null) {
-                mVideoCallListener = new InCallVideoCallListener(this);
+            if (mVideoCallCallback == null) {
+                mVideoCallCallback = new InCallVideoCallCallback(this);
             }
-            mTelecommCall.getVideoCall().setVideoCallListener(mVideoCallListener);
+            mTelecommCall.getVideoCall().registerCallback(mVideoCallCallback);
         }
 
         mChildCallIds.clear();
@@ -466,10 +466,6 @@
         return mTelecommCall.getDetails().getVideoState();
     }
 
-    public int getCallSubstate() {
-        return mTelecommCall.getDetails().getCallSubstate();
-    }
-
     public boolean isVideoCall(Context context) {
         return CallUtil.isVideoEnabled(context) &&
                 VideoProfile.VideoState.isVideo(getVideoState());
@@ -553,7 +549,7 @@
         }
 
         return String.format(Locale.US, "[%s, %s, %s, children:%s, parent:%s, conferenceable:%s, " +
-                "videoState:%d, callSubState:%d, mSessionModificationState:%d, VideoSettings:%s]",
+                "videoState:%d, mSessionModificationState:%d, VideoSettings:%s]",
                 mId,
                 State.toString(getState()),
                 android.telecom.Call.Details
@@ -562,7 +558,6 @@
                 getParentId(),
                 this.mTelecommCall.getConferenceableCalls(),
                 mTelecommCall.getDetails().getVideoState(),
-                mTelecommCall.getDetails().getCallSubstate(), 
                 mSessionModificationState,
                 getVideoSettings());
     }
diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
index 43431c7..718dd52 100644
--- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java
@@ -374,9 +374,11 @@
         final boolean showAddCall = TelecomAdapter.getInstance().canAddCall();
         final boolean showMerge = call.can(
                 android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE);
-        final boolean showUpgradeToVideo = !isVideo
-                && call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_LOCAL_TX)
-                && call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_REMOTE_RX);
+        // TODO: This button is currently being used for both upgrade and downgrade scenarios.
+        // It should be split into BUTTON_DOWNGRADE_TO_VOICE AND BUTTON_UPGRADE_TO_VIDEO
+        final boolean showUpgradeToVideo = isVideo ||
+                (call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_LOCAL_TX)
+                && call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_REMOTE_RX));
 
         final boolean showMute = call.can(android.telecom.Call.Details.CAPABILITY_MUTE);
 
@@ -386,9 +388,7 @@
         ui.setHold(isCallOnHold);
         ui.showButton(BUTTON_MUTE, showMute);
         ui.showButton(BUTTON_ADD_CALL, showAddCall);
-        // TODO: This button is currently being used for both upgrade and downgrade scenarios.
-        // It should be split into BUTTON_DOWNGRADE_TO_VOICE AND BUTTON_UPGRADE_TO_VIDEO
-        ui.showButton(BUTTON_UPGRADE_TO_VIDEO, true);
+        ui.showButton(BUTTON_UPGRADE_TO_VIDEO, showUpgradeToVideo);
         ui.showButton(BUTTON_DOWNGRADE_TO_VOICE, false);
         ui.showButton(BUTTON_SWITCH_CAMERA, isVideo);
         ui.showButton(BUTTON_PAUSE_VIDEO, isVideo);
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index 9c0fca3..2b75400 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -110,8 +110,8 @@
      */
     private PhoneAccountHandle mPendingPhoneAccountHandle;
 
-    private final android.telecom.Call.Listener mCallListener =
-            new android.telecom.Call.Listener() {
+    private final android.telecom.Call.Callback mCallCallback =
+            new android.telecom.Call.Callback() {
         @Override
         public void onPostDialWait(android.telecom.Call call, String remainingPostDialSequence) {
             onPostDialCharWait(mCallList.getCallByTelecommCall(call).getId(),
@@ -377,7 +377,7 @@
         // Since a call has been added we are no longer waiting for Telecom to send us a
         // call.
         setBoundAndWaitingForOutgoingCall(false, null);
-        call.addListener(mCallListener);
+        call.registerCallback(mCallCallback);
     }
 
     /**
@@ -385,7 +385,7 @@
      * method invocation from InCallService.
      */
     public void onCallRemoved(android.telecom.Call call) {
-        call.removeListener(mCallListener);
+        call.unregisterCallback(mCallCallback);
     }
 
     public void onCanAddCallChanged(boolean canAddCall) {
diff --git a/InCallUI/src/com/android/incallui/InCallVideoCallListener.java b/InCallUI/src/com/android/incallui/InCallVideoCallCallback.java
similarity index 85%
rename from InCallUI/src/com/android/incallui/InCallVideoCallListener.java
rename to InCallUI/src/com/android/incallui/InCallVideoCallCallback.java
index 741b8d6..f868b3b 100644
--- a/InCallUI/src/com/android/incallui/InCallVideoCallListener.java
+++ b/InCallUI/src/com/android/incallui/InCallVideoCallCallback.java
@@ -23,9 +23,9 @@
 import android.telecom.VideoProfile;
 
 /**
- * Implements the InCallUI Video Call Listener.
+ * Implements the InCallUI VideoCall Callback.
  */
-public class InCallVideoCallListener extends VideoCall.Listener {
+public class InCallVideoCallCallback extends VideoCall.Callback {
 
     /**
      * The call associated with this {@link InCallVideoClient}.
@@ -37,7 +37,7 @@
      *
      * @param call The call.
      */
-    public InCallVideoCallListener(Call call) {
+    public InCallVideoCallCallback(Call call) {
         mCall = call;
     }
 
@@ -57,9 +57,9 @@
 
         // Check for upgrades to video and downgrades to audio.
         if (wasVideoCall && !isVideoCall) {
-            InCallVideoCallListenerNotifier.getInstance().downgradeToAudio(mCall);
+            InCallVideoCallCallbackNotifier.getInstance().downgradeToAudio(mCall);
         } else if (previousVideoState != newVideoState) {
-            InCallVideoCallListenerNotifier.getInstance().upgradeToVideoRequest(mCall,
+            InCallVideoCallCallbackNotifier.getInstance().upgradeToVideoRequest(mCall,
                 newVideoState);
         }
     }
@@ -80,17 +80,17 @@
         Log.d(this, "onSessionModifyResponseReceived status=" + status + " requestedProfile="
                 + requestedProfile + " responseProfile=" + responseProfile);
         if (status != VideoProvider.SESSION_MODIFY_REQUEST_SUCCESS) {
-            InCallVideoCallListenerNotifier.getInstance().upgradeToVideoFail(status, mCall);
+            InCallVideoCallCallbackNotifier.getInstance().upgradeToVideoFail(status, mCall);
         } else if (requestedProfile != null && responseProfile != null) {
             boolean modifySucceeded = requestedProfile.getVideoState() ==
                     responseProfile.getVideoState();
             boolean isVideoCall = VideoProfile.VideoState.isVideo(responseProfile.getVideoState());
             if (modifySucceeded && isVideoCall) {
-                InCallVideoCallListenerNotifier.getInstance().upgradeToVideoSuccess(mCall);
+                InCallVideoCallCallbackNotifier.getInstance().upgradeToVideoSuccess(mCall);
             } else if (!modifySucceeded && isVideoCall) {
-                InCallVideoCallListenerNotifier.getInstance().upgradeToVideoFail(status, mCall);
+                InCallVideoCallCallbackNotifier.getInstance().upgradeToVideoFail(status, mCall);
             } else if (modifySucceeded && !isVideoCall) {
-                InCallVideoCallListenerNotifier.getInstance().downgradeToAudio(mCall);
+                InCallVideoCallCallbackNotifier.getInstance().downgradeToAudio(mCall);
             }
         } else {
             Log.d(this, "onSessionModifyResponseReceived request and response Profiles are null");
@@ -104,7 +104,7 @@
      */
     @Override
     public void onCallSessionEvent(int event) {
-        InCallVideoCallListenerNotifier.getInstance().callSessionEvent(event);
+        InCallVideoCallCallbackNotifier.getInstance().callSessionEvent(event);
     }
 
     /**
@@ -115,7 +115,7 @@
      */
     @Override
     public void onPeerDimensionsChanged(int width, int height) {
-        InCallVideoCallListenerNotifier.getInstance().peerDimensionsChanged(mCall, width, height);
+        InCallVideoCallCallbackNotifier.getInstance().peerDimensionsChanged(mCall, width, height);
     }
 
     /**
@@ -125,7 +125,7 @@
      */
     @Override
     public void onVideoQualityChanged(int videoQuality) {
-        InCallVideoCallListenerNotifier.getInstance().videoQualityChanged(mCall, videoQuality);
+        InCallVideoCallCallbackNotifier.getInstance().videoQualityChanged(mCall, videoQuality);
     }
 
     /**
@@ -137,7 +137,7 @@
     @Override
     public void onCallDataUsageChanged(long dataUsage) {
         Log.d(this, "onCallDataUsageChanged: dataUsage = " + dataUsage);
-        InCallVideoCallListenerNotifier.getInstance().callDataUsageChanged(dataUsage);
+        InCallVideoCallCallbackNotifier.getInstance().callDataUsageChanged(dataUsage);
     }
 
     /**
@@ -149,7 +149,7 @@
     @Override
     public void onCameraCapabilitiesChanged(CameraCapabilities cameraCapabilities) {
         if (cameraCapabilities != null) {
-            InCallVideoCallListenerNotifier.getInstance().cameraDimensionsChanged(
+            InCallVideoCallCallbackNotifier.getInstance().cameraDimensionsChanged(
                     mCall, cameraCapabilities.getWidth(), cameraCapabilities.getHeight());
         }
     }
diff --git a/InCallUI/src/com/android/incallui/InCallVideoCallListenerNotifier.java b/InCallUI/src/com/android/incallui/InCallVideoCallCallbackNotifier.java
similarity index 96%
rename from InCallUI/src/com/android/incallui/InCallVideoCallListenerNotifier.java
rename to InCallUI/src/com/android/incallui/InCallVideoCallCallbackNotifier.java
index 818ed03..dfb645b 100644
--- a/InCallUI/src/com/android/incallui/InCallVideoCallListenerNotifier.java
+++ b/InCallUI/src/com/android/incallui/InCallVideoCallCallbackNotifier.java
@@ -23,14 +23,15 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
- * Class used by {@link InCallService.VideoCallListener} to notify interested parties of incoming
+ * Class used by {@link InCallService.VideoCallCallback} to notify interested parties of incoming
  * events.
  */
-public class InCallVideoCallListenerNotifier {
+public class InCallVideoCallCallbackNotifier {
     /**
      * Singleton instance of this class.
      */
-    private static InCallVideoCallListenerNotifier sInstance = new InCallVideoCallListenerNotifier();
+    private static InCallVideoCallCallbackNotifier sInstance =
+            new InCallVideoCallCallbackNotifier();
 
     /**
      * ConcurrentHashMap constructor params: 8 is initial table size, 0.9f is
@@ -48,14 +49,14 @@
     /**
      * Static singleton accessor method.
      */
-    public static InCallVideoCallListenerNotifier getInstance() {
+    public static InCallVideoCallCallbackNotifier getInstance() {
         return sInstance;
     }
 
     /**
      * Private constructor.  Instance should only be acquired through getInstance().
      */
-    private InCallVideoCallListenerNotifier() {
+    private InCallVideoCallCallbackNotifier() {
     }
 
     /**
diff --git a/InCallUI/src/com/android/incallui/VideoCallFragment.java b/InCallUI/src/com/android/incallui/VideoCallFragment.java
index fb29c9c..6077017 100644
--- a/InCallUI/src/com/android/incallui/VideoCallFragment.java
+++ b/InCallUI/src/com/android/incallui/VideoCallFragment.java
@@ -595,58 +595,6 @@
     }
 
     /**
-     * Displays a message on the UI that the call substate has changed.
-     *
-     */
-    @Override
-    public void showCallSubstateChanged(int callSubstate) {
-        Log.d(this, "showCallSubstateChanged - call substate changed to "  + callSubstate);
-
-        final Context context = getActivity();
-        if (context == null) {
-            Log.e(this, "showCallSubstateChanged - Activity is null. Return");
-            return;
-        }
-
-        final Resources resources = context.getResources();
-
-        String callSubstateChangedText = "";
-
-        if (isEnabled(Connection.SUBSTATE_AUDIO_CONNECTED_SUSPENDED, callSubstate)) {
-            callSubstateChangedText +=
-                resources.getString(R.string.call_substate_connected_suspended_audio);
-        }
-
-        if (isEnabled(Connection.SUBSTATE_VIDEO_CONNECTED_SUSPENDED, callSubstate)) {
-            callSubstateChangedText +=
-                resources.getString(R.string.call_substate_connected_suspended_video);
-        }
-
-        if (isEnabled(Connection.SUBSTATE_AVP_RETRY, callSubstate)) {
-            callSubstateChangedText +=
-                resources.getString(R.string.call_substate_avp_retry);
-        }
-
-        if (isNotEnabled(Connection.SUBSTATE_ALL, callSubstate)) {
-            callSubstateChangedText = resources.getString(R.string.call_substate_call_resumed);
-        }
-
-        if (!callSubstateChangedText.isEmpty()) {
-            String callSubstateLabelText = resources.getString(R.string.call_substate_label);
-            Toast.makeText(context, callSubstateLabelText + callSubstateChangedText,
-                Toast.LENGTH_SHORT).show();
-        }
-    }
-
-    boolean isEnabled(int mask, int callSubstate) {
-        return (mask & callSubstate) == mask;
-    }
-
-    boolean isNotEnabled(int mask, int callSubstate) {
-        return (mask & callSubstate) == 0;
-    }
-
-    /**
      * Cleans up the video telephony surfaces.  Used when the presenter indicates a change to an
      * audio-only state.  Since the surfaces are static, it is important to ensure they are cleaned
      * up promptly.
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
index 9bc0822..f11f328 100644
--- a/InCallUI/src/com/android/incallui/VideoCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
@@ -33,8 +33,8 @@
 import com.android.incallui.InCallPresenter.InCallOrientationListener;
 import com.android.incallui.InCallPresenter.InCallStateListener;
 import com.android.incallui.InCallPresenter.IncomingCallListener;
-import com.android.incallui.InCallVideoCallListenerNotifier.SurfaceChangeListener;
-import com.android.incallui.InCallVideoCallListenerNotifier.VideoEventListener;
+import com.android.incallui.InCallVideoCallCallbackNotifier.SurfaceChangeListener;
+import com.android.incallui.InCallVideoCallCallbackNotifier.VideoEventListener;
 import com.google.common.base.Preconditions;
 
 import java.util.Objects;
@@ -64,7 +64,7 @@
 public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi> implements
         IncomingCallListener, InCallOrientationListener, InCallStateListener,
         InCallDetailsListener, SurfaceChangeListener, VideoEventListener,
-        InCallVideoCallListenerNotifier.SessionModificationListener {
+        InCallVideoCallCallbackNotifier.SessionModificationListener {
     public static final String TAG = "VideoCallPresenter";
 
     public static final boolean DEBUG = false;
@@ -158,11 +158,6 @@
 
     private static boolean mIsVideoMode = false;
 
-    /**
-     * Stores the current call substate.
-     */
-    private int mCurrentCallSubstate;
-
     /** Handler which resets request state to NO_REQUEST after an interval. */
     private Handler mSessionModificationResetHandler;
     private static final long SESSION_MODIFICATION_RESET_DELAY_MS = 3000;
@@ -198,9 +193,9 @@
         InCallPresenter.getInstance().addDetailsListener(this);
 
         // Register for surface and video events from {@link InCallVideoCallListener}s.
-        InCallVideoCallListenerNotifier.getInstance().addSurfaceChangeListener(this);
-        InCallVideoCallListenerNotifier.getInstance().addVideoEventListener(this);
-        InCallVideoCallListenerNotifier.getInstance().addSessionModificationListener(this);
+        InCallVideoCallCallbackNotifier.getInstance().addSurfaceChangeListener(this);
+        InCallVideoCallCallbackNotifier.getInstance().addVideoEventListener(this);
+        InCallVideoCallCallbackNotifier.getInstance().addSessionModificationListener(this);
         mCurrentVideoState = VideoProfile.VideoState.AUDIO_ONLY;
         mCurrentCallState = Call.State.INVALID;
     }
@@ -220,9 +215,9 @@
         InCallPresenter.getInstance().removeIncomingCallListener(this);
         InCallPresenter.getInstance().removeOrientationListener(this);
 
-        InCallVideoCallListenerNotifier.getInstance().removeSurfaceChangeListener(this);
-        InCallVideoCallListenerNotifier.getInstance().removeVideoEventListener(this);
-        InCallVideoCallListenerNotifier.getInstance().removeSessionModificationListener(this);
+        InCallVideoCallCallbackNotifier.getInstance().removeSurfaceChangeListener(this);
+        InCallVideoCallCallbackNotifier.getInstance().removeVideoEventListener(this);
+        InCallVideoCallCallbackNotifier.getInstance().removeSessionModificationListener(this);
     }
 
     /**
@@ -449,19 +444,6 @@
         showVideoUi(call.getVideoState(), call.getState());
     }
 
-    private void checkForCallSubstateChange(Call call) {
-        if (mCurrentCallSubstate != call.getCallSubstate()) {
-            VideoCallUi ui = getUi();
-            if (ui == null) {
-                Log.e(this, "Error VideoCallUi is null. Return.");
-                return;
-            }
-            mCurrentCallSubstate = call.getCallSubstate();
-            // Display a call substate changed message on UI.
-            ui.showCallSubstateChanged(mCurrentCallSubstate);
-        }
-    }
-
     private void cleanupSurfaces() {
         final VideoCallUi ui = getUi();
         if (ui == null) {
@@ -498,13 +480,11 @@
     private void updateCallCache(Call call) {
         if (call == null) {
             mCurrentVideoState = VideoProfile.VideoState.AUDIO_ONLY;
-            mCurrentCallSubstate = Connection.SUBSTATE_NONE;
             mCurrentCallState = Call.State.INVALID;
             mVideoCall = null;
             mPrimaryCall = null;
         } else {
             mCurrentVideoState = call.getVideoState();
-            mCurrentCallSubstate = call.getCallSubstate();
             mVideoCall = call.getVideoCall();
             mCurrentCallState = call.getState();
             mPrimaryCall = call;
@@ -529,7 +509,6 @@
         }
 
         updateVideoCall(call);
-        checkForCallSubstateChange(call);
 
         updateCallCache(call);
     }
@@ -1141,6 +1120,5 @@
         Point getScreenSize();
         Point getPreviewSize();
         void cleanupSurfaces();
-        void showCallSubstateChanged(int callSubstate);
     }
 }
diff --git a/InCallUI/src/com/android/incallui/VideoPauseController.java b/InCallUI/src/com/android/incallui/VideoPauseController.java
index dd47c7f..14e43b1 100644
--- a/InCallUI/src/com/android/incallui/VideoPauseController.java
+++ b/InCallUI/src/com/android/incallui/VideoPauseController.java
@@ -28,13 +28,12 @@
 
 package com.android.incallui;
 
-import android.os.SystemProperties;
 import android.telecom.VideoProfile;
 import com.android.incallui.Call.State;
 import com.android.incallui.InCallPresenter.InCallState;
 import com.android.incallui.InCallPresenter.InCallStateListener;
 import com.android.incallui.InCallPresenter.IncomingCallListener;
-import com.android.incallui.InCallVideoCallListenerNotifier.SessionModificationListener;
+import com.android.incallui.InCallVideoCallCallbackNotifier.SessionModificationListener;
 import com.google.common.base.Preconditions;
 
 /**
@@ -119,7 +118,7 @@
         mInCallPresenter = Preconditions.checkNotNull(inCallPresenter);
         mInCallPresenter.addListener(this);
         mInCallPresenter.addIncomingCallListener(this);
-        InCallVideoCallListenerNotifier.getInstance().addSessionModificationListener(this);
+        InCallVideoCallCallbackNotifier.getInstance().addSessionModificationListener(this);
     }
 
     /**
@@ -128,7 +127,7 @@
      */
     public void tearDown() {
         log("tearDown...");
-        InCallVideoCallListenerNotifier.getInstance().removeSessionModificationListener(this);
+        InCallVideoCallCallbackNotifier.getInstance().removeSessionModificationListener(this);
         mInCallPresenter.removeListener(this);
         mInCallPresenter.removeIncomingCallListener(this);
         clear();
