diff --git a/src/com/android/telecomm/Call.java b/src/com/android/telecomm/Call.java
index 4055444..0035aac 100644
--- a/src/com/android/telecomm/Call.java
+++ b/src/com/android/telecomm/Call.java
@@ -943,6 +943,10 @@
         }
     }
 
+    CallerInfo getCallerInfo() {
+        return mCallerInfo;
+    }
+
     /**
      * Saves the specified photo information if the specified token matches that of the last query.
      *
diff --git a/src/com/android/telecomm/CallActivity.java b/src/com/android/telecomm/CallActivity.java
index 0e66d32..4766310 100644
--- a/src/com/android/telecomm/CallActivity.java
+++ b/src/com/android/telecomm/CallActivity.java
@@ -90,9 +90,8 @@
      * @param intent Call intent containing data about the handle to call.
      */
     private void processOutgoingCallIntent(Intent intent) {
-        ContactInfo contactInfo = null;
         NewOutgoingCallIntentBroadcaster broadcaster =
-                new NewOutgoingCallIntentBroadcaster(mCallsManager, contactInfo, intent);
+                new NewOutgoingCallIntentBroadcaster(mCallsManager, intent);
         broadcaster.processIntent();
     }
 
diff --git a/src/com/android/telecomm/CallLogManager.java b/src/com/android/telecomm/CallLogManager.java
index 712551e..cf7e7ae 100644
--- a/src/com/android/telecomm/CallLogManager.java
+++ b/src/com/android/telecomm/CallLogManager.java
@@ -24,6 +24,7 @@
 import android.telecomm.PhoneAccount;
 import android.telephony.PhoneNumberUtils;
 
+import com.android.internal.telephony.CallerInfo;
 import com.android.internal.telephony.PhoneConstants;
 
 /**
@@ -48,11 +49,11 @@
          * @param durationInMillis Duration of the call (milliseconds).
          * @param dataUsage Data usage in bytes, or null if not applicable.
          */
-        public AddCallArgs(Context context, ContactInfo contactInfo, String number,
+        public AddCallArgs(Context context, CallerInfo callerInfo, String number,
                 int presentation, int callType, int features, PhoneAccount account,
                 long creationDate, long durationInMillis, Long dataUsage) {
             this.context = context;
-            this.contactInfo = contactInfo;
+            this.callerInfo = callerInfo;
             this.number = number;
             this.presentation = presentation;
             this.callType = callType;
@@ -65,7 +66,7 @@
         // Since the members are accessed directly, we don't use the
         // mXxxx notation.
         public final Context context;
-        public final ContactInfo contactInfo;
+        public final CallerInfo callerInfo;
         public final String number;
         public final int presentation;
         public final int callType;
@@ -112,24 +113,22 @@
         final long creationTime = call.getCreationTimeMillis();
         final long age = call.getAgeMillis();
 
-        // TODO(santoscordon): Replace with use of call.getCallerInfo() or similar.
-        final ContactInfo contactInfo = null;
         final String logNumber = getLogNumber(call);
 
         Log.d(TAG, "logNumber set to: %s", Log.pii(logNumber));
 
-        final int presentation = getPresentation(call, contactInfo);
+        final int presentation = getPresentation(call);
         final PhoneAccount account = call.getPhoneAccount();
 
         // TODO: Once features and data usage are available, wire them up here.
-        logCall(contactInfo, logNumber, presentation, callLogType, Calls.FEATURES_NONE, account,
-                creationTime, age, null);
+        logCall(call.getCallerInfo(), logNumber, presentation, callLogType, Calls.FEATURES_NONE,
+                account, creationTime, age, null);
     }
 
     /**
      * Inserts a call into the call log, based on the parameters passed in.
      *
-     * @param contactInfo Caller details.
+     * @param callerInfo Caller details.
      * @param number The number the call was made to or from.
      * @param presentation
      * @param callType The type of call.
@@ -139,7 +138,7 @@
      * @param dataUsage The data usage for the call, null if not applicable.
      */
     private void logCall(
-            ContactInfo contactInfo,
+            CallerInfo callerInfo,
             String number,
             int presentation,
             int callType,
@@ -160,10 +159,10 @@
         final boolean isOkToLogThisCall = !isEmergencyNumber || okToLogEmergencyNumber;
 
         if (isOkToLogThisCall) {
-            Log.d(TAG, "Logging Calllog entry: " + contactInfo + ", "
+            Log.d(TAG, "Logging Calllog entry: " + callerInfo + ", "
                     + Log.pii(number) + "," + presentation + ", " + callType
                     + ", " + start + ", " + duration);
-            AddCallArgs args = new AddCallArgs(mContext, contactInfo, number, presentation,
+            AddCallArgs args = new AddCallArgs(mContext, callerInfo, number, presentation,
                     callType, features, account, start, duration, dataUsage);
             logCallAsync(args);
         } else {
@@ -193,8 +192,7 @@
     }
 
     /**
-     * Gets the presentation from the {@link ContactInfo} if not null. Otherwise, gets it from the
-     * {@link Call}.
+     * Gets the presentation from the {@link Call}.
      *
      * TODO: There needs to be a way to pass information from
      * Connection.getNumberPresentation() into a {@link Call} object. Until then, always return
@@ -202,10 +200,9 @@
      * getNumberPresentation to the ContactInfo object as well.
      *
      * @param call The call object to retrieve caller details from.
-     * @param contactInfo The CallerInfo. May be null.
      * @return The number presentation constant to insert into the call logs.
      */
-    private int getPresentation(Call call, ContactInfo contactInfo) {
+    private int getPresentation(Call call) {
         return PhoneConstants.PRESENTATION_ALLOWED;
     }
 
@@ -235,7 +232,7 @@
 
                 try {
                     // May block.
-                    result[i] = Calls.addCall(null, c.context, c.number, c.presentation,
+                    result[i] = Calls.addCall(c.callerInfo, c.context, c.number, c.presentation,
                             c.callType, c.features, c.mAccount, c.timestamp, c.durationInSec,
                             c.dataUsage);
                 } catch (Exception e) {
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 99731d7..0893d38 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -303,8 +303,8 @@
      * @param speakerphoneOn Whether or not to turn the speakerphone on once the call connects.
      * @param videoState The desired video state for the outgoing call.
      */
-    void placeOutgoingCall(Uri handle, ContactInfo contactInfo, GatewayInfo gatewayInfo,
-            PhoneAccount account, boolean speakerphoneOn, int videoState) {
+    void placeOutgoingCall(Uri handle, GatewayInfo gatewayInfo, PhoneAccount account,
+            boolean speakerphoneOn, int videoState) {
 
         final Uri uriHandle = (gatewayInfo == null) ? handle : gatewayInfo.getGatewayHandle();
 
diff --git a/src/com/android/telecomm/ContactInfo.java b/src/com/android/telecomm/ContactInfo.java
deleted file mode 100644
index 649b34d..0000000
--- a/src/com/android/telecomm/ContactInfo.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.android.telecomm;
-
-public class ContactInfo {
-}
diff --git a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java b/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
index c75e184..0b99dc6 100644
--- a/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
+++ b/src/com/android/telecomm/NewOutgoingCallIntentBroadcaster.java
@@ -70,13 +70,10 @@
     private static final String SCHEME_SIP = "sip";
 
     private final CallsManager mCallsManager;
-    private final ContactInfo mContactInfo;
     private final Intent mIntent;
 
-    NewOutgoingCallIntentBroadcaster(CallsManager callsManager, ContactInfo contactInfo,
-            Intent intent) {
+    NewOutgoingCallIntentBroadcaster(CallsManager callsManager, Intent intent) {
         mCallsManager = callsManager;
-        mContactInfo = contactInfo;
         mIntent = intent;
     }
 
@@ -121,8 +118,7 @@
 
             GatewayInfo gatewayInfo = getGateWayInfoFromIntent(intent, resultHandleUri);
             PhoneAccount account = getAccountFromIntent(intent);
-            mCallsManager.placeOutgoingCall(resultHandleUri, mContactInfo, gatewayInfo,
-                    account,
+            mCallsManager.placeOutgoingCall(resultHandleUri, gatewayInfo, account,
                     mIntent.getBooleanExtra(TelecommConstants.EXTRA_START_CALL_WITH_SPEAKERPHONE,
                             false),
                     mIntent.getIntExtra(TelecommConstants.EXTRA_START_CALL_WITH_VIDEO_STATE,
@@ -193,8 +189,7 @@
                     + " OutgoingCallBroadcastReceiver: %s", intent);
             String scheme = isUriNumber ? SCHEME_SIP : SCHEME_TEL;
             mCallsManager.placeOutgoingCall(
-                    Uri.fromParts(scheme, handle, null), mContactInfo, null, null,
-                    mIntent.getBooleanExtra(TelecommConstants.EXTRA_START_CALL_WITH_SPEAKERPHONE,
+                    Uri.fromParts(scheme, handle, null), null, null, mIntent.getBooleanExtra(TelecommConstants.EXTRA_START_CALL_WITH_SPEAKERPHONE,
                             false),
                     mIntent.getIntExtra(TelecommConstants.EXTRA_START_CALL_WITH_VIDEO_STATE,
                             VideoCallProfile.VIDEO_STATE_AUDIO_ONLY));
