diff --git a/src/com/android/server/telecom/CallLogManager.java b/src/com/android/server/telecom/CallLogManager.java
index e848dd4..0ec2362 100755
--- a/src/com/android/server/telecom/CallLogManager.java
+++ b/src/com/android/server/telecom/CallLogManager.java
@@ -342,20 +342,29 @@
                 paramBuilder.setAddForAllUsers(accountHandle.getUserHandle() == null);
             }
         }
-        if (call.getExtras() != null) {
-            if (call.getExtras().containsKey(TelecomManager.EXTRA_PRIORITY)) {
-                paramBuilder.setPriority(call.getExtras().getInt(TelecomManager.EXTRA_PRIORITY));
+        if (call.getIntentExtras() != null) {
+            if (call.getIntentExtras().containsKey(TelecomManager.EXTRA_PRIORITY)) {
+                paramBuilder.setPriority(call.getIntentExtras()
+                        .getInt(TelecomManager.EXTRA_PRIORITY));
             }
-            if (call.getExtras().containsKey(TelecomManager.EXTRA_CALL_SUBJECT)) {
-                paramBuilder.setSubject(call.getExtras()
+            if (call.getIntentExtras().containsKey(TelecomManager.EXTRA_CALL_SUBJECT)) {
+                paramBuilder.setSubject(call.getIntentExtras()
                         .getString(TelecomManager.EXTRA_CALL_SUBJECT));
             }
-            if (call.getExtras().containsKey(TelecomManager.EXTRA_PICTURE_URI)) {
+            if (call.getIntentExtras().containsKey(TelecomManager.EXTRA_PICTURE_URI)) {
+                paramBuilder.setPictureUri(call.getIntentExtras()
+                        .getParcelable(TelecomManager.EXTRA_PICTURE_URI));
+            }
+            // The picture uri can end up either in extras or in intent extras due to how these
+            // two bundles are set. For incoming calls they're in extras, but for outgoing calls
+            // they're in intentExtras.
+            if (call.getExtras() != null
+                    && call.getExtras().containsKey(TelecomManager.EXTRA_PICTURE_URI)) {
                 paramBuilder.setPictureUri(call.getExtras()
                         .getParcelable(TelecomManager.EXTRA_PICTURE_URI));
             }
-            if (call.getExtras().containsKey(TelecomManager.EXTRA_LOCATION)) {
-                Location l = call.getExtras().getParcelable(TelecomManager.EXTRA_LOCATION);
+            if (call.getIntentExtras().containsKey(TelecomManager.EXTRA_LOCATION)) {
+                Location l = call.getIntentExtras().getParcelable(TelecomManager.EXTRA_LOCATION);
                 if (l != null) {
                     paramBuilder.setLatitude(l.getLatitude());
                     paramBuilder.setLongitude(l.getLongitude());
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 53e6084..ff68e7a 100755
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -775,17 +775,17 @@
             int attachmentMask = result.mCallScreeningResponse.getCallComposerAttachmentsToShow();
             if ((attachmentMask
                     & CallScreeningService.CallResponse.CALL_COMPOSER_ATTACHMENT_LOCATION) == 0) {
-                incomingCall.getExtras().remove(TelecomManager.EXTRA_LOCATION);
+                incomingCall.getIntentExtras().remove(TelecomManager.EXTRA_LOCATION);
             }
 
             if ((attachmentMask
                     & CallScreeningService.CallResponse.CALL_COMPOSER_ATTACHMENT_SUBJECT) == 0) {
-                incomingCall.getExtras().remove(TelecomManager.EXTRA_CALL_SUBJECT);
+                incomingCall.getIntentExtras().remove(TelecomManager.EXTRA_CALL_SUBJECT);
             }
 
             if ((attachmentMask
                     & CallScreeningService.CallResponse.CALL_COMPOSER_ATTACHMENT_PRIORITY) == 0) {
-                incomingCall.getExtras().remove(TelecomManager.EXTRA_PRIORITY);
+                incomingCall.getIntentExtras().remove(TelecomManager.EXTRA_PRIORITY);
             }
         }
 
diff --git a/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java b/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java
index 62ff257..b9f5667 100644
--- a/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallLogManagerTest.java
@@ -852,7 +852,7 @@
         extras.putString(TelecomManager.EXTRA_CALL_SUBJECT, subject);
         extras.putParcelable(TelecomManager.EXTRA_LOCATION, location);
         extras.putParcelable(TelecomManager.EXTRA_PICTURE_URI, fakeProviderUri);
-        when(fakeCall.getExtras()).thenReturn(extras);
+        when(fakeCall.getIntentExtras()).thenReturn(extras);
 
         mCallLogManager.onCallStateChanged(fakeCall, CallState.ACTIVE,
                 CallState.DISCONNECTED);
