diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index 0b60c4a..08a50ab 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -16,6 +16,7 @@
 
 package com.android.telecomm;
 
+import android.net.Uri;
 import android.telecomm.CallInfo;
 import android.telecomm.CallState;
 
@@ -52,7 +53,7 @@
     private CallState mState;
 
     /** The handle with which to establish this call. */
-    private String mHandle;
+    private Uri mHandle;
 
     /**
      * The call service which is attempted or already connecting this call.
@@ -87,7 +88,7 @@
      * @param handle The handle to dial.
      * @param contactInfo Information about the entity being called.
      */
-    Call(String handle, ContactInfo contactInfo) {
+    Call(Uri handle, ContactInfo contactInfo) {
         mId = UUID.randomUUID().toString();  // UUIDs should provide sufficient uniqueness.
         mState = CallState.NEW;
         mHandle = handle;
@@ -120,11 +121,11 @@
         clearCallInfo();
     }
 
-    String getHandle() {
+    Uri getHandle() {
         return mHandle;
     }
 
-    void setHandle(String handle) {
+    void setHandle(Uri handle) {
         mHandle = handle;
     }
 
diff --git a/src/com/android/telecomm/CallActivity.java b/src/com/android/telecomm/CallActivity.java
index 2418a0a..06d4267 100644
--- a/src/com/android/telecomm/CallActivity.java
+++ b/src/com/android/telecomm/CallActivity.java
@@ -89,17 +89,8 @@
      * @param intent Call intent containing data about the handle to call.
      */
     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;
-        mCallsManager.processOutgoingCallIntent(handle, contactInfo);
+        mCallsManager.processOutgoingCallIntent(intent.getData(), contactInfo);
     }
 
     /**
diff --git a/src/com/android/telecomm/CallLogManager.java b/src/com/android/telecomm/CallLogManager.java
index de9b301..718c685 100644
--- a/src/com/android/telecomm/CallLogManager.java
+++ b/src/com/android/telecomm/CallLogManager.java
@@ -97,7 +97,7 @@
      *     {@link android.provider.CallLog.Calls#MISSED_TYPE}
      */
     private void logCall(Call call, int callLogType) {
-        String number = call.getHandle();
+        Uri number = call.getHandle();
         final long creationTime = call.getCreationTimeInMilliseconds();
         final long age = call.getAgeInMilliseconds();
 
@@ -160,16 +160,18 @@
      * @return the phone number to be logged.
      */
     private String getLogNumber(Call call) {
-        String handle = call.getHandle();
+        Uri handle = call.getHandle();
 
         if (handle == null) {
             return null;
         }
 
-        if (!PhoneNumberUtils.isUriNumber(handle)) {
-            handle = PhoneNumberUtils.stripSeparators(handle);
+        // TODO: Add support for SIP numbers.
+        String handleString = handle.toString();
+        if (!PhoneNumberUtils.isUriNumber(handleString)) {
+            handleString = PhoneNumberUtils.stripSeparators(handleString);
         }
-        return handle;
+        return handleString;
     }
 
     /**
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 4b4de71..556c770 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.media.AudioManager;
+import android.net.Uri;
 import android.os.Bundle;
 import android.telecomm.CallService;
 import android.telecomm.CallServiceDescriptor;
@@ -130,7 +131,7 @@
         Log.d(this, "handleSuccessfulIncomingCall");
         Preconditions.checkState(call.getState() == CallState.RINGING);
 
-        String handle = call.getHandle();
+        Uri handle = call.getHandle();
         ContactInfo contactInfo = call.getContactInfo();
         for (IncomingCallValidator validator : mIncomingCallValidators) {
             if (!validator.isValid(handle, contactInfo)) {
@@ -160,7 +161,7 @@
      * @param handle The handle to dial.
      * @param contactInfo Information about the entity being called.
      */
-    void processOutgoingCallIntent(String handle, ContactInfo contactInfo) {
+    void processOutgoingCallIntent(Uri handle, ContactInfo contactInfo) {
         for (OutgoingCallValidator validator : mOutgoingCallValidators) {
             if (!validator.isValid(handle, contactInfo)) {
                 // TODO(gilad): Display an error message.
diff --git a/src/com/android/telecomm/IncomingCallValidator.java b/src/com/android/telecomm/IncomingCallValidator.java
index 75ad10b..769eae7 100644
--- a/src/com/android/telecomm/IncomingCallValidator.java
+++ b/src/com/android/telecomm/IncomingCallValidator.java
@@ -16,6 +16,8 @@
 
 package com.android.telecomm;
 
+import android.net.Uri;
+
 /**
  * Implementations can be used to reject incoming calls based on arbitrary restrictions across call
  * services (e.g. suppressing calls from certain phone numbers regardless if they are received over
@@ -23,5 +25,5 @@
  */
 public interface IncomingCallValidator {
 
-    boolean isValid(String handle, ContactInfo contactInfo);
+    boolean isValid(Uri handle, ContactInfo contactInfo);
 }
diff --git a/src/com/android/telecomm/OutgoingCallValidator.java b/src/com/android/telecomm/OutgoingCallValidator.java
index 0553b58..288d37e 100644
--- a/src/com/android/telecomm/OutgoingCallValidator.java
+++ b/src/com/android/telecomm/OutgoingCallValidator.java
@@ -16,6 +16,8 @@
 
 package com.android.telecomm;
 
+import android.net.Uri;
+
 /**
  * Implementations can be used to suppress certain classes of outgoing calls based on arbitrary
  * restrictions across call services (e.g. black-listing some phone numbers regardless if these
@@ -27,5 +29,5 @@
  */
 public interface OutgoingCallValidator {
 
-    boolean isValid(String handle, ContactInfo contactInfo);
+    boolean isValid(Uri handle, ContactInfo contactInfo);
 }
