diff --git a/src/com/android/server/telecom/CallActivity.java b/src/com/android/server/telecom/CallActivity.java
index b249788..69da7e4 100644
--- a/src/com/android/server/telecom/CallActivity.java
+++ b/src/com/android/server/telecom/CallActivity.java
@@ -112,11 +112,20 @@
         }
 
         intent.putExtra(CallReceiver.KEY_IS_DEFAULT_DIALER, isDefaultDialer());
-        sendBroadcastToReceiver(intent, false /* isIncoming */);
+
+        if (UserHandle.myUserId() == UserHandle.USER_OWNER) {
+            CallReceiver.processOutgoingCallIntent(getApplicationContext(), intent);
+        } else {
+            sendBroadcastToReceiver(intent, false /* isIncoming */);
+        }
     }
 
     private void processIncomingCallIntent(Intent intent) {
-        sendBroadcastToReceiver(intent, true /* isIncoming */);
+        if (UserHandle.myUserId() == UserHandle.USER_OWNER) {
+            CallReceiver.processIncomingCallIntent(intent);
+        } else {
+            sendBroadcastToReceiver(intent, true /* isIncoming */);
+        }
     }
 
     private boolean isDefaultDialer() {
diff --git a/src/com/android/server/telecom/CallReceiver.java b/src/com/android/server/telecom/CallReceiver.java
index fe82b67..c8fdeb4 100644
--- a/src/com/android/server/telecom/CallReceiver.java
+++ b/src/com/android/server/telecom/CallReceiver.java
@@ -19,6 +19,7 @@
  * the primary user.
  */
 public class CallReceiver extends BroadcastReceiver {
+    private static final String TAG = CallReceiver.class.getName();
 
     static final String KEY_IS_INCOMING_CALL = "is_incoming_call";
     static final String KEY_IS_DEFAULT_DIALER =
@@ -27,7 +28,7 @@
     @Override
     public void onReceive(Context context, Intent intent) {
         final boolean isIncomingCall = intent.getBooleanExtra(KEY_IS_INCOMING_CALL, false);
-        Log.d(this, "onReceive - isIncomingCall: %s", isIncomingCall);
+        Log.i(TAG, "onReceive - isIncomingCall: %s", isIncomingCall);
 
         if (isIncomingCall) {
             processIncomingCallIntent(intent);
@@ -41,7 +42,7 @@
      *
      * @param intent Call intent containing data about the handle to call.
      */
-    private void processOutgoingCallIntent(Context context, Intent intent) {
+    static void processOutgoingCallIntent(Context context, Intent intent) {
         Uri handle = intent.getData();
         String scheme = handle.getScheme();
         String uriString = handle.getSchemeSpecificPart();
@@ -84,16 +85,16 @@
         }
     }
 
-    private void processIncomingCallIntent(Intent intent) {
+    static void processIncomingCallIntent(Intent intent) {
         PhoneAccountHandle phoneAccountHandle = intent.getParcelableExtra(
                 TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE);
 
         if (phoneAccountHandle == null) {
-            Log.w(this, "Rejecting incoming call due to null phone account");
+            Log.w(TAG, "Rejecting incoming call due to null phone account");
             return;
         }
         if (phoneAccountHandle.getComponentName() == null) {
-            Log.w(this, "Rejecting incoming call due to null component name");
+            Log.w(TAG, "Rejecting incoming call due to null component name");
             return;
         }
 
@@ -105,16 +106,17 @@
             clientExtras = Bundle.EMPTY;
         }
 
-        Log.d(this, "Processing incoming call from connection service [%s]",
+        Log.d(TAG, "Processing incoming call from connection service [%s]",
                 phoneAccountHandle.getComponentName());
         getCallsManager().processIncomingCallIntent(phoneAccountHandle, clientExtras);
     }
 
-    CallsManager getCallsManager() {
+    static CallsManager getCallsManager() {
         return CallsManager.getInstance();
     }
 
-    private void disconnectCallAndShowErrorDialog(Context context, Call call, int errorCode) {
+    private static void disconnectCallAndShowErrorDialog(
+            Context context, Call call, int errorCode) {
         call.disconnect();
         final Intent errorIntent = new Intent(context, ErrorDialogActivity.class);
         int errorMessageId = -1;
