diff --git a/src/com/android/telecomm/CallActivity.java b/src/com/android/telecomm/CallActivity.java
index 1d48962..54424e4 100644
--- a/src/com/android/telecomm/CallActivity.java
+++ b/src/com/android/telecomm/CallActivity.java
@@ -23,15 +23,23 @@
 import android.util.Log;
 import android.widget.Toast;
 
+import com.android.telecomm.exceptions.CallServiceUnavailableException;
+import com.android.telecomm.exceptions.RestrictedCallException;
+
 /**
  * Activity that handles system CALL actions and forwards them to {@link CallsManager}.
  * Handles all three CALL action types: CALL, CALL_PRIVILEGED, and CALL_EMERGENCY.
  * TODO(santoscordon): Connect with CallsManager.
  */
 public class CallActivity extends Activity {
+    /** Used to identify log entries by this class. */
     private static final String TAG = CallActivity.class.getSimpleName();
+
+    /** Indicates whether or not debug-level entries should be logged. */
     private static boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
+    private CallsManager mCallsManager = CallsManager.getInstance();
+
     /**
      * {@inheritDoc}
      *
@@ -60,7 +68,7 @@
         // TODO(santoscordon): Figure out if there is something to restore from bundle.
         // See OutgoingCallBroadcaster in services/Telephony for more.
 
-        processIntent(intent);
+        processOutgoingCallIntent(intent);
 
         // TODO(santoscordon): Remove this finish() once this app does more than just show a toast.
         finish();
@@ -75,10 +83,24 @@
      *
      * @param intent Call intent containing data about the handle to call.
      */
-    private void processIntent(Intent intent) {
-        // TODO(santoscordon): Pass intent data through to CallsManager. At the moment, we just
-        // display a toast of the data.
+    private void processOutgoingCallIntent(Intent intent) {
+        // TODO(santoscordon): Remove the toast.
         String toastContent = "[" + intent.getAction() + "] " + intent.getDataString();
         Toast.makeText(this, toastContent, Toast.LENGTH_LONG).show();
+
+        // TODO(gilad): Pull the scheme etc. from the data string as well as any relevant extras
+        // from the intent into structured data and invoke the corresponding CallsManager APIs
+        // based on that.  May want to add a static utility to perform that in case the logic is
+        // non-trivial/voluminous.
+        String handle = intent.getDataString();
+        ContactInfo contactInfo = null;
+        try {
+          mCallsManager.processOutgoingCallIntent(handle, contactInfo);
+        } catch (RestrictedCallException e) {
+          // TODO(gilad): Handle or explicitly state to be ignored.
+        } catch (CallServiceUnavailableException e) {
+          // TODO(gilad): Handle or explicitly state to be ignored. If both should be ignored, consider
+          // extending from the same base class and simplify the handling code to a single catch clause.
+        }
     }
 }
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 99b68bd..a5fdcf7 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -6,11 +6,22 @@
 import java.util.ArrayList;
 import java.util.List;
 
-/** Singleton */
+/**
+ * Singleton.
+ *
+ * NOTE(gilad): by design most APIs are package private, use the relevant adapter/s to allow
+ * access from other packages specifically refraining from passing the CallsManager instance
+ * beyond the com.android.telecomm package boundary.
+ */
 public class CallsManager {
 
   private static final CallsManager INSTANCE = new CallsManager();
 
+  /**
+   * May be unnecessary per off-line discussions (between santoscordon and gilad) since the set
+   * of CallsManager APIs that need to be exposed to the dialer (or any application firing call
+   * intents) may be empty.
+   */
   private DialerAdapter dialerAdapter;
 
   private InCallAdapter inCallAdapter;
@@ -34,12 +45,10 @@
     voicemailManager = new VoicemailManager();  // As necessary etc.
   }
 
-  /** Package private */
   static CallsManager getInstance() {
     return INSTANCE;
   }
 
-  /** Package private */
   // TODO(gilad): Circle back to how we'd want to do this.
   void addCallService(CallService callService) {
     if (callService != null) {
@@ -48,15 +57,20 @@
     }
   }
 
-  /** Package private */
-  void connectTo(String userInput, ContactInfo contactInfo)
+  /**
+   * Attempts to issue/connect the specified call.  From an (arbitrary) application standpoint,
+   * all that is required to initiate this flow is to fire either of the CALL, CALL_PRIVILEGED,
+   * and CALL_EMERGENCY intents. These are listened to by CallActivity.java which then invokes
+   * this method.
+   */
+  void processOutgoingCallIntent(String handle, ContactInfo contactInfo)
       throws RestrictedCallException, CallServiceUnavailableException {
 
     for (OutgoingCallFilter policy : outgoingCallFilters) {
-      policy.validate(userInput, contactInfo);
+      policy.validate(handle, contactInfo);
     }
 
     // No objection to issue the call, proceed with trying to put it through.
-    switchboard.placeOutgoingCall(userInput, contactInfo);
+    switchboard.placeOutgoingCall(handle, contactInfo);
   }
 }
diff --git a/src/com/android/telecomm/DialerAdapter.java b/src/com/android/telecomm/DialerAdapter.java
index fef3d9f..927663b 100644
--- a/src/com/android/telecomm/DialerAdapter.java
+++ b/src/com/android/telecomm/DialerAdapter.java
@@ -1,10 +1,14 @@
 package com.android.telecomm;
 
-/** Only exposes the CallsManager APIs that the Dialer should have access to. */
+/**
+ * Only exposes the CallsManager APIs that the Dialer should have access to.
+ *
+ * NOTE(gilad): may be unnecessary, see the comment in CallsManager.
+ */
+
 public class DialerAdapter {
   private CallsManager callsManager;
 
-  /** Package private */
   DialerAdapter(CallsManager callsManager) {
     this.callsManager = callsManager;
   }
diff --git a/src/com/android/telecomm/TelecommReceiver.java b/src/com/android/telecomm/TelecommReceiver.java
index 12afe16..9ed0fa7 100644
--- a/src/com/android/telecomm/TelecommReceiver.java
+++ b/src/com/android/telecomm/TelecommReceiver.java
@@ -26,6 +26,8 @@
  * Receiver for public intents relating to Telecomm.
  */
 public class TelecommReceiver extends BroadcastReceiver {
+
+    /** Used to identify log entries by this class. */
     private static final String TAG = TelecommReceiver.class.getSimpleName();
 
     /**
@@ -42,15 +44,17 @@
     /**
      * The package name of the {@link ICallServiceProvider} used to get the {@link CallService}.
      */
-    /* package */ static final String EXTRA_PACKAGE_NAME = "com.android.telecomm.PACKAGE_NAME";
+    static final String EXTRA_PACKAGE_NAME = "com.android.telecomm.PACKAGE_NAME";
 
     /**
      * The CallService ID used to identify the {@link CallService} via {@link ICallServiceProvider}.
      * IDs are only required to be unique within the scope of an {@link ICallServiceProvider}.
      */
-    /* package */ static final String EXTRA_CALL_SERVICE_ID =
+    static final String EXTRA_CALL_SERVICE_ID =
             "com.android.telecomm.CALL_SERVICE_ID";
 
+    private CallsManager mCallsManager = CallsManager.getInstance();
+
     /** {@inheritDoc} */
     @Override
     public void onReceive(Context context, Intent intent) {
@@ -62,9 +66,9 @@
 
     /**
      * Tells CallsManager to connect to the {@link #CallService} identified by the package name
-     * and call service ID in the extras of the intent parameter.
+     * and call-service ID in the extras of the intent parameter.
      *
-     * @param intent The intent containing the package name and call service ID as extras.
+     * @param intent The intent containing the package name and call-service ID as extras.
      */
     private void connectToCallService(Intent intent) {
         String packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME);
