diff --git a/src/com/android/incallui/AnswerPresenter.java b/src/com/android/incallui/AnswerPresenter.java
index fc75bf0..97f60c0 100644
--- a/src/com/android/incallui/AnswerPresenter.java
+++ b/src/com/android/incallui/AnswerPresenter.java
@@ -113,6 +113,11 @@
         // no-op
     }
 
+    @Override
+    public void onChildNumberChange() {
+        // no-op
+    }
+
     private boolean isVideoUpgradePending(Call call) {
         return call.getSessionModificationState()
                 == Call.SessionModificationState.RECEIVED_UPGRADE_TO_VIDEO_REQUEST;
diff --git a/src/com/android/incallui/Call.java b/src/com/android/incallui/Call.java
index 01205ff..16a53b2 100644
--- a/src/com/android/incallui/Call.java
+++ b/src/com/android/incallui/Call.java
@@ -334,12 +334,13 @@
 
         Bundle callExtras = mTelecommCall.getDetails().getExtras();
         if (callExtras != null) {
-            // Child address arrives when the call is first set up, so we do not need to notify the
-            // UI of this.
+            // Check for a change in the child address and notify any listeners.
             if (callExtras.containsKey(Connection.EXTRA_CHILD_ADDRESS)) {
                 String childNumber = callExtras.getString(Connection.EXTRA_CHILD_ADDRESS);
+
                 if (!Objects.equals(childNumber, mChildNumber)) {
                     mChildNumber = childNumber;
+                    CallList.getInstance().onChildNumberChange(this);
                 }
             }
 
diff --git a/src/com/android/incallui/CallCardPresenter.java b/src/com/android/incallui/CallCardPresenter.java
index d597218..7833340 100644
--- a/src/com/android/incallui/CallCardPresenter.java
+++ b/src/com/android/incallui/CallCardPresenter.java
@@ -347,6 +347,19 @@
         updatePrimaryDisplayInfo();
     }
 
+    /**
+     * Handles a change to the child number by refreshing the primary call info.
+     */
+    @Override
+    public void onChildNumberChange() {
+        Log.v(this, "onChildNumberChange");
+
+        if (mPrimary == null) {
+            return;
+        }
+        updatePrimaryDisplayInfo();
+    }
+
     private String getSubscriptionNumber() {
         // If it's an emergency call, and they're not populating the callback number,
         // then try to fall back to the phone sub info (to hopefully get the SIM's
diff --git a/src/com/android/incallui/CallList.java b/src/com/android/incallui/CallList.java
index 666ba95..11b5914 100644
--- a/src/com/android/incallui/CallList.java
+++ b/src/com/android/incallui/CallList.java
@@ -176,6 +176,21 @@
         }
     }
 
+    /**
+     * Called when the child number changes for a call.  The child number can be received after a
+     * call is initially set up, so we need to be able to inform listeners of the change.
+     *
+     * @param call The call.
+     */
+    public void onChildNumberChange(Call call) {
+        final List<CallUpdateListener> listeners = mCallUpdateListenerMap.get(call.getId());
+        if (listeners != null) {
+            for (CallUpdateListener listener : listeners) {
+                listener.onChildNumberChange();
+            }
+        }
+    }
+
     public void notifyCallUpdateListeners(Call call) {
         final List<CallUpdateListener> listeners = mCallUpdateListenerMap.get(call.getId());
         if (listeners != null) {
@@ -632,5 +647,10 @@
          * Notifies of a change to the last forwarded number for a call.
          */
         public void onLastForwardedNumberChange();
+
+        /**
+         * Notifies of a change to the child number for a call.
+         */
+        public void onChildNumberChange();
     }
 }
diff --git a/src/com/android/incallui/StatusBarNotifier.java b/src/com/android/incallui/StatusBarNotifier.java
index 3f862a2..a9b6ccc 100644
--- a/src/com/android/incallui/StatusBarNotifier.java
+++ b/src/com/android/incallui/StatusBarNotifier.java
@@ -654,4 +654,9 @@
     public void onLastForwardedNumberChange() {
         // no-op
     }
+
+    @Override
+    public void onChildNumberChange() {
+        // no-op
+    }
 }
