diff --git a/java/com/android/incallui/rtt/impl/RttChatAdapter.java b/java/com/android/incallui/rtt/impl/RttChatAdapter.java
index 955fc9f..fb73d19 100644
--- a/java/com/android/incallui/rtt/impl/RttChatAdapter.java
+++ b/java/com/android/incallui/rtt/impl/RttChatAdapter.java
@@ -17,6 +17,7 @@
 package com.android.incallui.rtt.impl;
 
 import android.content.Context;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -32,6 +33,8 @@
 /** Adapter class for holding RTT chat data. */
 public class RttChatAdapter extends RecyclerView.Adapter<RttChatMessageViewHolder> {
 
+  private Drawable avatarDrawable;
+
   interface MessageListener {
     void onUpdateRemoteMessage(int position);
 
@@ -75,7 +78,7 @@
     if (i > 0) {
       isSameGroup = rttMessages.get(i).isRemote == rttMessages.get(i - 1).isRemote;
     }
-    rttChatMessageViewHolder.setMessage(rttMessages.get(i), isSameGroup);
+    rttChatMessageViewHolder.setMessage(rttMessages.get(i), isSameGroup, avatarDrawable);
   }
 
   @Override
@@ -169,4 +172,8 @@
     bundle.putParcelableArrayList(KEY_MESSAGE_DATA, (ArrayList<RttChatMessage>) rttMessages);
     bundle.putInt(KEY_LAST_LOCAL_MESSAGE, lastIndexOfLocalMessage);
   }
+
+  void setAvatarDrawable(Drawable drawable) {
+    avatarDrawable = drawable;
+  }
 }
diff --git a/java/com/android/incallui/rtt/impl/RttChatFragment.java b/java/com/android/incallui/rtt/impl/RttChatFragment.java
index a181f88..a889408 100644
--- a/java/com/android/incallui/rtt/impl/RttChatFragment.java
+++ b/java/com/android/incallui/rtt/impl/RttChatFragment.java
@@ -48,9 +48,12 @@
 import com.android.dialer.common.FragmentUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.UiUtil;
+import com.android.dialer.lettertile.LetterTileDrawable;
+import com.android.dialer.util.DrawableConverter;
 import com.android.incallui.audioroute.AudioRouteSelectorDialogFragment.AudioRouteSelectorPresenter;
 import com.android.incallui.call.DialerCall.State;
 import com.android.incallui.hold.OnHoldFragment;
+import com.android.incallui.incall.protocol.ContactPhotoType;
 import com.android.incallui.incall.protocol.InCallButtonIds;
 import com.android.incallui.incall.protocol.InCallButtonUi;
 import com.android.incallui.incall.protocol.InCallButtonUiDelegate;
@@ -95,7 +98,8 @@
   private RttOverflowMenu overflowMenu;
   private SecondaryInfo savedSecondaryInfo;
   private TextView statusBanner;
-  private PrimaryInfo primaryInfo;
+  private PrimaryInfo primaryInfo = PrimaryInfo.empty();
+  private PrimaryCallState primaryCallState = PrimaryCallState.empty();
   private boolean isUserScrolling;
   private boolean shouldAutoScrolling;
 
@@ -366,9 +370,35 @@
   public void setPrimary(@NonNull PrimaryInfo primaryInfo) {
     LogUtil.i("RttChatFragment.setPrimary", primaryInfo.toString());
     nameTextView.setText(primaryInfo.name());
+    updateAvatar(primaryInfo);
     this.primaryInfo = primaryInfo;
   }
 
+  private void updateAvatar(PrimaryInfo primaryInfo) {
+    boolean hasPhoto =
+        primaryInfo.photo() != null && primaryInfo.photoType() == ContactPhotoType.CONTACT;
+    // Contact has a photo, don't render a letter tile.
+    if (hasPhoto) {
+      int avatarSize = getResources().getDimensionPixelSize(R.dimen.rtt_avatar_size);
+      adapter.setAvatarDrawable(
+          DrawableConverter.getRoundedDrawable(
+              getContext(), primaryInfo.photo(), avatarSize, avatarSize));
+    } else {
+      LetterTileDrawable letterTile = new LetterTileDrawable(getResources());
+      letterTile.setCanonicalDialerLetterTileDetails(
+          primaryInfo.name(),
+          primaryInfo.contactInfoLookupKey(),
+          LetterTileDrawable.SHAPE_CIRCLE,
+          LetterTileDrawable.getContactTypeFromPrimitives(
+              primaryCallState.isVoiceMailNumber(),
+              primaryInfo.isSpam(),
+              primaryCallState.isBusinessNumber(),
+              primaryInfo.numberPresentation(),
+              primaryCallState.isConference()));
+      adapter.setAvatarDrawable(letterTile);
+    }
+  }
+
   @Override
   public void onAttach(Context context) {
     super.onAttach(context);
@@ -404,6 +434,7 @@
   @Override
   public void setCallState(@NonNull PrimaryCallState primaryCallState) {
     LogUtil.i("RttChatFragment.setCallState", primaryCallState.toString());
+    this.primaryCallState = primaryCallState;
     if (!isTimerStarted && primaryCallState.state() == State.ACTIVE) {
       LogUtil.i(
           "RttChatFragment.setCallState", "starting timer with base: %d", chronometer.getBase());
diff --git a/java/com/android/incallui/rtt/impl/RttChatMessageViewHolder.java b/java/com/android/incallui/rtt/impl/RttChatMessageViewHolder.java
index c88786a..2beea95 100644
--- a/java/com/android/incallui/rtt/impl/RttChatMessageViewHolder.java
+++ b/java/com/android/incallui/rtt/impl/RttChatMessageViewHolder.java
@@ -17,6 +17,7 @@
 package com.android.incallui.rtt.impl;
 
 import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
 import android.support.v7.widget.RecyclerView.ViewHolder;
 import android.view.Gravity;
 import android.view.View;
@@ -41,7 +42,7 @@
     resources = view.getResources();
   }
 
-  void setMessage(RttChatMessage message, boolean isSameGroup) {
+  void setMessage(RttChatMessage message, boolean isSameGroup, Drawable imageDrawable) {
     messageTextView.setText(message.getContent());
     LinearLayout.LayoutParams params = (LayoutParams) container.getLayoutParams();
     params.gravity = message.isRemote ? Gravity.START : Gravity.END;
@@ -56,7 +57,7 @@
         avatarImageView.setVisibility(View.INVISIBLE);
       } else {
         avatarImageView.setVisibility(View.VISIBLE);
-        avatarImageView.setImageResource(R.drawable.product_logo_avatar_anonymous_white_color_120);
+        avatarImageView.setImageDrawable(imageDrawable);
       }
     } else {
       avatarImageView.setVisibility(View.GONE);
diff --git a/java/com/android/incallui/rtt/impl/res/layout/rtt_chat_list_item.xml b/java/com/android/incallui/rtt/impl/res/layout/rtt_chat_list_item.xml
index 54b0f4f..5f17142 100644
--- a/java/com/android/incallui/rtt/impl/res/layout/rtt_chat_list_item.xml
+++ b/java/com/android/incallui/rtt/impl/res/layout/rtt_chat_list_item.xml
@@ -26,8 +26,8 @@
       android:orientation="horizontal">
     <ImageView
         android:id="@+id/rtt_chat_avatar"
-        android:layout_width="40dp"
-        android:layout_height="40dp"
+        android:layout_width="@dimen/rtt_avatar_size"
+        android:layout_height="@dimen/rtt_avatar_size"
         android:layout_marginStart="8dp"
         android:layout_marginEnd="8dp"
         android:visibility="gone"
diff --git a/java/com/android/incallui/rtt/impl/res/values/dimens.xml b/java/com/android/incallui/rtt/impl/res/values/dimens.xml
index a6418d7..c3d28da 100644
--- a/java/com/android/incallui/rtt/impl/res/values/dimens.xml
+++ b/java/com/android/incallui/rtt/impl/res/values/dimens.xml
@@ -19,4 +19,5 @@
   <dimen name="rtt_same_group_message_margin_top">2dp</dimen>
   <dimen name="rtt_overflow_menu_width">180dp</dimen>
   <dimen name="rtt_overflow_menu_elevation">8dp</dimen>
-</resources>
\ No newline at end of file
+  <dimen name="rtt_avatar_size">40dp</dimen>
+</resources>
