diff --git a/java/com/android/dialer/theme/res/values/colors.xml b/java/com/android/dialer/theme/res/values/colors.xml
index 0e6f54f..3c8cabb 100644
--- a/java/com/android/dialer/theme/res/values/colors.xml
+++ b/java/com/android/dialer/theme/res/values/colors.xml
@@ -42,6 +42,8 @@
 
   <!-- Secondary text color in the Phone app -->
   <color name="dialer_secondary_text_color">#636363</color>
+  <!-- 38% opacity -->
+  <color name="dialer_secondary_text_color_hiden">#61000000</color>
 
   <!-- Color of the theme of the Dialer app -->
   <color name="dialtacts_theme_color">@color/dialer_theme_color</color>
diff --git a/java/com/android/dialer/theme/res/values/dimens.xml b/java/com/android/dialer/theme/res/values/dimens.xml
index ee52c97..972cb53 100644
--- a/java/com/android/dialer/theme/res/values/dimens.xml
+++ b/java/com/android/dialer/theme/res/values/dimens.xml
@@ -38,4 +38,7 @@
   <dimen name="actionbar_contentInsetStart">72dp</dimen>
 
   <dimen name="call_log_icon_margin">2dp</dimen>
+
+  <item name="alpha_enabled" format="float" type="dimen">1.0</item>
+  <item name="alpha_hiden" format="float" type="dimen">0.54</item>
 </resources>
diff --git a/java/com/android/incallui/ConferenceParticipantListAdapter.java b/java/com/android/incallui/ConferenceParticipantListAdapter.java
index 70cdf24..d0f4885 100644
--- a/java/com/android/incallui/ConferenceParticipantListAdapter.java
+++ b/java/com/android/incallui/ConferenceParticipantListAdapter.java
@@ -24,6 +24,7 @@
 import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
 import android.util.ArraySet;
+import android.util.TypedValue;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -245,7 +246,8 @@
         contactCache.lookupKey,
         contactCache.displayPhotoUri,
         thisRowCanSeparate,
-        thisRowCanDisconnect);
+        thisRowCanDisconnect,
+        call.getNonConferenceState());
 
     // Tag the row in the conference participant list with the call id to make it easier to
     // find calls when contact cache information is loaded.
@@ -290,9 +292,11 @@
       String lookupKey,
       Uri photoUri,
       boolean thisRowCanSeparate,
-      boolean thisRowCanDisconnect) {
+      boolean thisRowCanDisconnect,
+      int callState) {
 
     final ImageView photoView = (ImageView) view.findViewById(R.id.callerPhoto);
+    final TextView statusTextView = (TextView) view.findViewById(R.id.conferenceCallerStatus);
     final TextView nameTextView = (TextView) view.findViewById(R.id.conferenceCallerName);
     final TextView numberTextView = (TextView) view.findViewById(R.id.conferenceCallerNumber);
     final TextView numberTypeTextView =
@@ -300,6 +304,13 @@
     final View endButton = view.findViewById(R.id.conferenceCallerDisconnect);
     final View separateButton = view.findViewById(R.id.conferenceCallerSeparate);
 
+    if (callState == DialerCall.State.ONHOLD) {
+      setViewsOnHold(photoView, statusTextView, nameTextView, numberTextView, numberTypeTextView);
+    } else {
+      setViewsNotOnHold(
+          photoView, statusTextView, nameTextView, numberTextView, numberTypeTextView);
+    }
+
     endButton.setVisibility(thisRowCanDisconnect ? View.VISIBLE : View.GONE);
     if (thisRowCanDisconnect) {
       endButton.setOnClickListener(mDisconnectListener);
@@ -338,6 +349,47 @@
     }
   }
 
+  private void setViewsOnHold(
+      ImageView photoView,
+      TextView statusTextView,
+      TextView nameTextView,
+      TextView numberTextView,
+      TextView numberTypeTextView) {
+    CharSequence onHoldText =
+        TextUtils.concat(getContext().getText(R.string.notification_on_hold).toString(), " • ");
+    statusTextView.setText(onHoldText);
+    statusTextView.setVisibility(View.VISIBLE);
+
+    int onHoldColor = getContext().getColor(R.color.dialer_secondary_text_color_hiden);
+    nameTextView.setTextColor(onHoldColor);
+    numberTextView.setTextColor(onHoldColor);
+    numberTypeTextView.setTextColor(onHoldColor);
+
+    TypedValue alpha = new TypedValue();
+    getContext().getResources().getValue(R.dimen.alpha_hiden, alpha, true);
+    photoView.setAlpha(alpha.getFloat());
+  }
+
+  private void setViewsNotOnHold(
+      ImageView photoView,
+      TextView statusTextView,
+      TextView nameTextView,
+      TextView numberTextView,
+      TextView numberTypeTextView) {
+    statusTextView.setVisibility(View.GONE);
+
+    nameTextView.setTextColor(
+        getContext().getColor(R.color.conference_call_manager_caller_name_text_color));
+    numberTextView.setTextColor(
+        getContext().getColor(R.color.conference_call_manager_secondary_text_color));
+    numberTypeTextView.setTextColor(
+        getContext().getColor(R.color.conference_call_manager_secondary_text_color));
+
+    TypedValue alpha = new TypedValue();
+    getContext().getResources().getValue(R.dimen.alpha_enabled, alpha, true);
+    photoView.setAlpha(alpha.getFloat());
+  }
+
   /**
    * Updates the participant info list which is bound to the ListView. Stores the call and contact
    * info for all entries. The list is sorted alphabetically by participant name.
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index 82a29ee..d393b42 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -706,6 +706,10 @@
     }
   }
 
+  public int getNonConferenceState() {
+    return mState;
+  }
+
   public void setState(int state) {
     if (state == State.INCOMING) {
       mLogState.isIncoming = true;
diff --git a/java/com/android/incallui/res/layout/caller_in_conference.xml b/java/com/android/incallui/res/layout/caller_in_conference.xml
index 4f4b2f0..3791818 100644
--- a/java/com/android/incallui/res/layout/caller_in_conference.xml
+++ b/java/com/android/incallui/res/layout/caller_in_conference.xml
@@ -62,6 +62,15 @@
         android:gravity="bottom"
         android:orientation="horizontal">
 
+        <!-- Status (only support on hold now) -->
+        <TextView
+            android:id="@+id/conferenceCallerStatus"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            style="@style/SecondaryText"
+            android:textColor="@color/dialer_secondary_text_color_hiden"
+            android:visibility="gone"/>
+
         <!-- Number -->
         <TextView
           android:id="@+id/conferenceCallerNumber"
