diff --git a/InCallUI/res/layout/call_card_content.xml b/InCallUI/res/layout/call_card_content.xml
index cb6f533..c59c1c7 100644
--- a/InCallUI/res/layout/call_card_content.xml
+++ b/InCallUI/res/layout/call_card_content.xml
@@ -39,6 +39,14 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content" />
 
+        <TextView android:id="@+id/connectionServiceMessage"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:visibility="gone"
+            android:padding="@dimen/call_banner_side_padding"
+            android:background="@android:color/white" />
+
     </LinearLayout>
 
     <FrameLayout
diff --git a/InCallUI/res/values/strings.xml b/InCallUI/res/values/strings.xml
index 78fe885..d0f300d 100644
--- a/InCallUI/res/values/strings.xml
+++ b/InCallUI/res/values/strings.xml
@@ -156,6 +156,10 @@
     <!-- In-call screen: status label when there is a problem connecting a video call. -->
     <string name="card_title_video_call_error">Cannot connect video call</string>
 
+    <string name="card_title_callback_number_emergency">Your emergency call back number\n
+        <xliff:g id="dark_number">%1$s</xliff:g>
+    </string>
+
     <!-- Notification strings -->
     <!-- The "label" of the in-call Notification for a dialing call, used
          as the format string for a Chronometer widget. [CHAR LIMIT=60] -->
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index abc53ae..5080da0 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -28,6 +28,7 @@
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.telephony.DisconnectCause;
+import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 import android.view.Display;
 import android.view.LayoutInflater;
@@ -43,7 +44,6 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
-import com.android.contacts.common.util.ViewUtil;
 import com.android.contacts.common.widget.FloatingActionButtonController;
 import com.android.phone.common.animation.AnimUtils;
 
@@ -84,6 +84,9 @@
     private TextView mSecondaryCallProviderLabel;
     private ImageView mSecondaryCallProviderIcon;
 
+    // Dark number info bar
+    private TextView mInCallMessageLabel;
+
     private FloatingActionButtonController mFloatingActionButtonController;
     private View mFloatingActionButtonContainer;
     private int mFloatingActionButtonHideOffset;
@@ -160,6 +163,7 @@
         mPrimaryCallCardContainer = view.findViewById(R.id.primary_call_info_container);
         mPrimaryCallInfo = view.findViewById(R.id.primary_call_banner);
         mCallButtonsContainer = view.findViewById(R.id.callButtonFragment);
+        mInCallMessageLabel = (TextView) view.findViewById(R.id.connectionServiceMessage);
 
         mFloatingActionButtonContainer = view.findViewById(
                 R.id.floating_end_call_action_button_container);
@@ -360,6 +364,27 @@
         }
     }
 
+
+    @Override
+    public void setCallDetails(android.telecomm.Call.Details details) {
+    }
+
+    @Override
+    public void setEmergencyCallbackNumber(String callbackNumber) {
+        if (TextUtils.isEmpty(callbackNumber)) {
+            mInCallMessageLabel.setVisibility(View.GONE);
+            return;
+        }
+
+        // TODO: The new Locale-specific methods don't seem to be working. Revisit this.
+        callbackNumber = PhoneNumberUtils.formatNumber(callbackNumber);
+
+        String text = getString(R.string.card_title_callback_number_emergency, callbackNumber);
+        mInCallMessageLabel.setText(text);
+
+        mInCallMessageLabel.setVisibility(View.VISIBLE);
+    }
+
     private void showInternetCallLabel(boolean show) {
         if (show) {
             final String label = getView().getContext().getString(
@@ -637,8 +662,10 @@
                 mFloatingActionButtonController.manuallyTranslate(
                         mFloatingActionButtonController.getTranslationXForAlignment(
                                 mIsLandscape ? FloatingActionButtonController.ALIGN_QUARTER_RIGHT
-                                        : FloatingActionButtonController.ALIGN_MIDDLE),
-                        mFloatingActionButtonHideOffset);
+                                        : FloatingActionButtonController.ALIGN_MIDDLE
+                        ),
+                        mFloatingActionButtonHideOffset
+                );
                 mCallButtonsContainer.setAlpha(0);
                 mCallStateLabel.setAlpha(0);
                 mPrimaryName.setAlpha(0);
diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java
index 32becd2..eb46403 100644
--- a/InCallUI/src/com/android/incallui/CallCardPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java
@@ -20,21 +20,25 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
+import android.os.Bundle;
 import android.telecomm.CallCapabilities;
 import android.telecomm.PhoneAccount;
 import android.telecomm.PhoneAccountMetadata;
+import android.telecomm.StatusHints;
+import android.telecomm.TelecommConstants;
 import android.telecomm.TelecommManager;
 import android.telephony.DisconnectCause;
+import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 
 import com.android.incallui.AudioModeProvider.AudioModeListener;
 import com.android.incallui.ContactInfoCache.ContactCacheEntry;
 import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
+import com.android.incallui.InCallPresenter.InCallDetailsListener;
 import com.android.incallui.InCallPresenter.InCallState;
 import com.android.incallui.InCallPresenter.InCallStateListener;
 import com.android.incallui.InCallPresenter.IncomingCallListener;
-import com.android.services.telephony.common.AudioMode;
 
 import com.google.common.base.Preconditions;
 
@@ -44,7 +48,8 @@
  * This class listens for changes to InCallState and passes it along to the fragment.
  */
 public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
-        implements InCallStateListener, AudioModeListener, IncomingCallListener {
+        implements InCallStateListener, AudioModeListener, IncomingCallListener,
+        InCallDetailsListener {
 
     private static final String TAG = CallCardPresenter.class.getSimpleName();
     private static final long CALL_TIME_UPDATE_INTERVAL = 1000; // in milliseconds
@@ -98,6 +103,7 @@
         // Register for call state changes last
         InCallPresenter.getInstance().addListener(this);
         InCallPresenter.getInstance().addIncomingCallListener(this);
+        InCallPresenter.getInstance().addDetailsListener(this);
     }
 
     @Override
@@ -107,6 +113,7 @@
         // stop getting call state changes
         InCallPresenter.getInstance().removeListener(this);
         InCallPresenter.getInstance().removeIncomingCallListener(this);
+        InCallPresenter.getInstance().removeDetailsListener(this);
 
         AudioModeProvider.getInstance().removeListener(this);
 
@@ -200,6 +207,35 @@
     }
 
     @Override
+    public void onDetailsChanged(android.telecomm.Call.Details details) {
+        getUi().setCallDetails(details);
+
+        String currentNumber = mPrimary.getHandle().getSchemeSpecificPart();
+        if (PhoneNumberUtils.isEmergencyNumber(currentNumber)) {
+            setEmergencyNumberIfSet(details);
+        }
+    }
+
+    private void setEmergencyNumberIfSet(android.telecomm.Call.Details details) {
+        String callbackNumber = null;
+
+        StatusHints statusHints = details.getStatusHints();
+        if (statusHints != null) {
+            Bundle extras = statusHints.getExtras();
+            if (extras != null) {
+                callbackNumber = extras.getString(
+                        TelecommConstants.EXTRA_EMERGENCY_CALL_BACK_NUMBER, null);
+            } else {
+                Log.d(this, "No extras; not updating callback number");
+            }
+        } else {
+            Log.d(this, "No status hints; not updating callback number");
+        }
+
+        getUi().setEmergencyCallbackNumber(callbackNumber);
+    }
+
+    @Override
     public void onAudioMode(int mode) {
     }
 
@@ -533,6 +569,8 @@
         void setPrimaryPhoneNumber(String phoneNumber);
         void setPrimaryLabel(String label);
         void setEndCallButtonEnabled(boolean enabled);
+        void setEmergencyCallbackNumber(String number);
+        void setCallDetails(android.telecomm.Call.Details details);
     }
 
     private TelecommManager getTelecommManager() {
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index 5965a95..83d21b8 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -44,6 +44,7 @@
 
     private final Set<InCallStateListener> mListeners = Sets.newHashSet();
     private final ArrayList<IncomingCallListener> mIncomingCallListeners = Lists.newArrayList();
+    private final Set<InCallDetailsListener> mDetailsListeners = Sets.newHashSet();
 
     private AudioModeProvider mAudioModeProvider;
     private StatusBarNotifier mStatusBarNotifier;
@@ -80,6 +81,14 @@
                     CallList.getInstance().getCallByTelecommCall(call).getId(),
                     remainingPostDialSequence);
         }
+
+        @Override
+        public void onDetailsChanged(android.telecomm.Call call,
+                android.telecomm.Call.Details details) {
+            for (InCallDetailsListener listener : mDetailsListeners) {
+                listener.onDetailsChanged(details);
+            }
+        }
     };
 
     /**
@@ -369,6 +378,16 @@
         mListeners.remove(listener);
     }
 
+    public void addDetailsListener(InCallDetailsListener listener) {
+        Preconditions.checkNotNull(listener);
+        mDetailsListeners.add(listener);
+    }
+
+    public void removeDetailsListener(InCallDetailsListener listener) {
+        Preconditions.checkNotNull(listener);
+        mDetailsListeners.remove(listener);
+    }
+
     public ProximitySensor getProximitySensor() {
         return mProximitySensor;
     }
@@ -842,4 +861,8 @@
     public interface IncomingCallListener {
         public void onIncomingCall(InCallState state, Call call);
     }
+
+    public interface InCallDetailsListener {
+        public void onDetailsChanged(android.telecomm.Call.Details details);
+    }
 }
