diff --git a/src/com/android/telecomm/CallServiceWrapper.java b/src/com/android/telecomm/CallServiceWrapper.java
index 9b5e2c3..41a80e5 100644
--- a/src/com/android/telecomm/CallServiceWrapper.java
+++ b/src/com/android/telecomm/CallServiceWrapper.java
@@ -17,7 +17,6 @@
 package com.android.telecomm;
 
 import android.os.Bundle;
-
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
@@ -37,6 +36,7 @@
 import com.google.common.collect.Sets;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -252,6 +252,21 @@
             args.arg2 = ringback;
             mHandler.obtainMessage(MSG_SET_REQUESTING_RINGBACK, args).sendToTarget();
         }
+
+        /** ${inheritDoc} */
+        @Override
+        public void removeCall(String callId) {
+        }
+
+        /** ${inheritDoc} */
+        @Override
+        public void setCanConferenceWith(String callId, List<String> conferenceCapableCallIds) {
+        }
+
+        /** ${inheritDoc} */
+        @Override
+        public void setIsConferenced(String conferenceCallId, String callId, boolean isConferenced) {
+        }
     }
 
     private final Adapter mAdapter = new Adapter();
@@ -514,12 +529,12 @@
                 mIncomingCallsManager.handleFailedIncomingCall(call);
             }
 
-            if (!mPendingIncomingCalls.isEmpty()) {
-                Log.wtf(this, "Pending calls did not get cleared.");
-                mPendingIncomingCalls.clear();
-            }
-        }
-
-        mCallIdMapper.clear();
+      if (!mPendingIncomingCalls.isEmpty()) {
+        Log.wtf(this, "Pending calls did not get cleared.");
+        mPendingIncomingCalls.clear();
+      }
     }
+
+    mCallIdMapper.clear();
+  }
 }
diff --git a/src/com/android/telecomm/InCallAdapter.java b/src/com/android/telecomm/InCallAdapter.java
index da7cf18..b4ebb07 100644
--- a/src/com/android/telecomm/InCallAdapter.java
+++ b/src/com/android/telecomm/InCallAdapter.java
@@ -180,4 +180,14 @@
     public void setAudioRoute(int route) {
         mHandler.obtainMessage(MSG_SET_AUDIO_ROUTE, route, 0).sendToTarget();
     }
+
+    /** ${inheritDoc} */
+    @Override
+    public void conferenceWith(String arg0, String arg1) {
+    }
+
+    /** ${inheritDoc} */
+    @Override
+    public void splitFromConference(String arg0) {
+    }
 }
diff --git a/tests/src/com/android/telecomm/testcallservice/TestCallService.java b/tests/src/com/android/telecomm/testcallservice/TestCallService.java
index 691e791..3c9827a 100644
--- a/tests/src/com/android/telecomm/testcallservice/TestCallService.java
+++ b/tests/src/com/android/telecomm/testcallservice/TestCallService.java
@@ -34,6 +34,7 @@
 import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -182,6 +183,16 @@
         return super.onUnbind(intent);
     }
 
+    /** ${inheritDoc} */
+    @Override
+    public void addToConference(String conferenceCallId, List<String> callIds) {
+    }
+
+    /** ${inheritDoc} */
+    @Override
+    public void splitFromConference(String conferenceCallId, String callId) {
+    }
+
     private void activateCall(String callId) {
         getAdapter().setActive(callId);
         if (mMediaPlayer != null && !mMediaPlayer.isPlaying()) {
