diff --git a/src/com/android/telecomm/CallServiceFinder.java b/src/com/android/telecomm/CallServiceFinder.java
index 898877f..5d73dce 100644
--- a/src/com/android/telecomm/CallServiceFinder.java
+++ b/src/com/android/telecomm/CallServiceFinder.java
@@ -244,7 +244,7 @@
         try {
             provider.lookupCallServices(new ICallServiceLookupResponse.Stub() {
                 @Override
-                public void onResult(List<IBinder> binderList) {
+                public void setCallServices(List<IBinder> binderList) {
                     List<ICallService> callServices = Lists.newArrayList();
                     for (IBinder binder : binderList) {
                         callServices.add(ICallService.Stub.asInterface(binder));
diff --git a/tests/src/com/android/telecomm/testcallservice/TestCallService.java b/tests/src/com/android/telecomm/testcallservice/TestCallService.java
index 69e0db0..163fe35 100644
--- a/tests/src/com/android/telecomm/testcallservice/TestCallService.java
+++ b/tests/src/com/android/telecomm/testcallservice/TestCallService.java
@@ -17,39 +17,91 @@
 package com.android.telecomm.testcallservice;
 
 import com.google.android.collect.Lists;
+import com.google.common.base.Preconditions;
 
+import java.util.Date;
+
+import android.os.RemoteException;
+import android.telecomm.CallInfo;
 import android.telecomm.CallService;
 import android.telecomm.ICallServiceAdapter;
+import android.text.TextUtils;
 import android.util.Log;
 
 /**
  * Service which provides fake calls to test the ICallService interface.
  */
 public class TestCallService extends CallService {
-    /** Unique identifying tag used for logging. */
     private static final String TAG = TestCallService.class.getSimpleName();
 
+    /**
+     * Adapter to call back into CallsManager.
+     */
+    private ICallServiceAdapter mCallsManagerAdapter;
+
     /** {@inheritDoc} */
     @Override
     public void setCallServiceAdapter(ICallServiceAdapter callServiceAdapter) {
         Log.i(TAG, "setCallServiceAdapter()");
+
+        mCallsManagerAdapter = callServiceAdapter;
     }
 
-    /** {@inheritDoc} */
+    /**
+     * Responds as compatible for all calls except those starting with the number 7 (arbitrarily
+     * chosen for testing purposes).
+     *
+     * {@inheritDoc}
+     */
     @Override
-    public void isCompatibleWith(String handle) {
-        Log.i(TAG, "isCompatibleWith(" + handle + ")");
+    public void isCompatibleWith(String handle, String callId) {
+        Log.i(TAG, "isCompatibleWith(" + handle + ", " + callId + ")");
+        Preconditions.checkNotNull(handle);
+
+        // Is compatible if the handle doesn't start with 7.
+        boolean isCompatible = (handle.charAt(0) != '7');
+
+        try {
+            // Tell CallsManager whether this call service can place the call (is compatible).
+            // Returning positively on setCompatibleWith() doesn't guarantee that we will be chosen
+            // to place the call. If we *are* chosen then CallsManager will execute the call()
+            // method below.
+            mCallsManagerAdapter.setCompatibleWith(handle, callId, isCompatible);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to setCompatibleWith().", e);
+        }
     }
 
-    /** {@inheritDoc} */
+    /**
+     * Starts a call by calling into the adapter. For testing purposes this methods acts as if a
+     * call was successfully connected every time.
+     *
+     * {@inheritDoc}
+     */
     @Override
-    public void call(String handle) {
-        Log.i(TAG, "call(" + handle + ")");
+    public void call(String handle, String callId) {
+        Log.i(TAG, "call(" + handle + ", " + callId + ")");
+
+        try {
+            // This creates a call within CallsManager starting at the DIALING state.
+            // TODO(santoscordon): When we define the call states, consider renaming newOutgoingCall
+            // to newDialingCall to match the states exactly and as an indication of the starting
+            // state for this new call. This depends on what the states are ultimately defined as.
+            mCallsManagerAdapter.newOutgoingCall(callId);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to create a newOutgoingCall().", e);
+        }
     }
 
     /** {@inheritDoc} */
     @Override
     public void disconnect(String callId) {
         Log.i(TAG, "disconnect(" + callId + ")");
+
+        try {
+            mCallsManagerAdapter.setDisconnected(callId);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to setDisconnected().", e);
+        }
     }
 }
diff --git a/tests/src/com/android/telecomm/testcallservice/TestCallServiceProvider.java b/tests/src/com/android/telecomm/testcallservice/TestCallServiceProvider.java
index e83cd82..6e420f6 100644
--- a/tests/src/com/android/telecomm/testcallservice/TestCallServiceProvider.java
+++ b/tests/src/com/android/telecomm/testcallservice/TestCallServiceProvider.java
@@ -16,20 +16,33 @@
 
 package com.android.telecomm.testcallservice;
 
+import android.os.IBinder;
+import android.os.RemoteException;
 import android.telecomm.CallServiceProvider;
 import android.telecomm.ICallServiceLookupResponse;
 import android.util.Log;
 
+import com.google.common.collect.Lists;
+
+import java.util.List;
+
 /**
  * Service which provides fake calls to test the ICallService interface.
  */
 public class TestCallServiceProvider extends CallServiceProvider {
-    /** Unique identifying tag used for logging. */
     private static final String TAG = TestCallServiceProvider.class.getSimpleName();
 
     /** {@inheritDoc} */
     @Override
     public void lookupCallServices(ICallServiceLookupResponse response) {
         Log.i(TAG, "lookupCallServices()");
+
+        try {
+            TestCallService callService = new TestCallService();
+            List<IBinder> callServiceList = Lists.newArrayList(callService.getBinder());
+            response.setCallServices(callServiceList);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to setCallServices().", e);
+        }
     }
 }
