diff --git a/InCallUI/src/com/android/incallui/AnswerPresenter.java b/InCallUI/src/com/android/incallui/AnswerPresenter.java
index 32c7b9a..03c8553 100644
--- a/InCallUI/src/com/android/incallui/AnswerPresenter.java
+++ b/InCallUI/src/com/android/incallui/AnswerPresenter.java
@@ -35,7 +35,8 @@
  */
 public class AnswerPresenter extends Presenter<AnswerPresenter.AnswerUi>
         implements CallList.CallUpdateListener, InCallPresenter.InCallUiListener,
-                InCallPresenter.IncomingCallListener {
+                InCallPresenter.IncomingCallListener,
+                CallList.Listener {
 
     private static final String TAG = AnswerPresenter.class.getSimpleName();
 
@@ -54,7 +55,7 @@
             }
             call = calls.getVideoUpgradeRequestCall();
             Log.d(this, "getVideoUpgradeRequestCall call =" + call);
-            if (videoCall != null && call == null) {
+            if (call == null) {
                 processVideoUpgradeRequestCall(call);
             }
         } else {
@@ -69,26 +70,10 @@
     @Override
     public void onIncomingCall(InCallState oldState, InCallState newState, Call call) {
         Log.d(this, "onIncomingCall: " + this);
-        if (!call.getId().equals(mCallId)) {
-            // A new call is coming in.
-            processIncomingCall(call);
-        }
-    }
-
-    @Override
-    public void onDisconnect(Call call) {
-        // no-op
-    }
-
-    @Override
-    public void onIncomingCall(Call call) {
-        // TODO: Ui is being destroyed when the fragment detaches.  Need clean up step to stop
-        // getting updates here.
-        Log.d(this, "onIncomingCall: " + this);
         if (getUi() != null) {
             Call modifyCall = CallList.getInstance().getVideoUpgradeRequestCall();
             if (modifyCall != null) {
-                getUi().showAnswerUi(false);
+                showAnswerUi(false);
                 Log.d(this, "declining upgrade request id: ");
                 CallList.getInstance().removeCallUpdateListener(mCallId, this);
                 InCallPresenter.getInstance().declineUpgradeRequest(getUi().getContext());
@@ -97,10 +82,22 @@
                 // A new call is coming in.
                 processIncomingCall(call);
             }
->>>>>>> 8bef461
         }
     }
 
+    @Override
+    public void onIncomingCall(Call call) {
+    }
+
+    @Override
+    public void onCallListChange(CallList list) {
+    }
+
+    @Override
+    public void onDisconnect(Call call) {
+        // no-op
+    }
+
     private boolean isVideoUpgradePending(Call call) {
         return call.getSessionModificationState()
                 == Call.SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST;
diff --git a/InCallUI/src/com/android/incallui/VideoCallFragment.java b/InCallUI/src/com/android/incallui/VideoCallFragment.java
index 233ff92..d0ef13a 100644
--- a/InCallUI/src/com/android/incallui/VideoCallFragment.java
+++ b/InCallUI/src/com/android/incallui/VideoCallFragment.java
@@ -110,7 +110,7 @@
      * changes.
      */
     private static class VideoCallSurface implements TextureView.SurfaceTextureListener,
-            View.OnClickListener {
+            View.OnClickListener, View.OnAttachStateChangeListener {
         private int mSurfaceId;
         private VideoCallPresenter mPresenter;
         private TextureView mTextureView;
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
index e4a5db9..43eef4b 100644
--- a/InCallUI/src/com/android/incallui/VideoCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
@@ -71,8 +71,6 @@
         InCallVideoCallListenerNotifier.SessionModificationListener {
     public static final String TAG = "VideoCallPresenter";
 
-    private static final String TAG = VideoCallPresenter.class.getSimpleName();
-
     public static final boolean DEBUG = false;
 
     /**
