diff --git a/java/com/android/dialer/calllog/database/Coalescer.java b/java/com/android/dialer/calllog/database/Coalescer.java
index 55bed3e..63fa9f8 100644
--- a/java/com/android/dialer/calllog/database/Coalescer.java
+++ b/java/com/android/dialer/calllog/database/Coalescer.java
@@ -32,6 +32,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import javax.inject.Inject;
 
 /**
@@ -129,7 +130,12 @@
    */
   private static boolean rowsShouldBeCombined(
       DialerPhoneNumberUtil dialerPhoneNumberUtil, ContentValues row1, ContentValues row2) {
-    // TODO(zachh): Real implementation.
+    // Don't combine rows which don't use the same phone account.
+    if (!Objects.equals(
+        row1.getAsString(AnnotatedCallLog.PHONE_ACCOUNT_LABEL),
+        row2.getAsString(AnnotatedCallLog.PHONE_ACCOUNT_LABEL))) {
+      return false;
+    }
     DialerPhoneNumber number1;
     DialerPhoneNumber number2;
     try {
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index e4af417..9d77505 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -29,6 +29,7 @@
 import android.provider.CallLog;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.support.annotation.ColorInt;
 import android.support.annotation.MainThread;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
@@ -159,6 +160,8 @@
             .useMostRecentString(AnnotatedCallLog.NUMBER_TYPE_LABEL)
             .useMostRecentString(AnnotatedCallLog.GEOCODED_LOCATION)
             .useMostRecentString(AnnotatedCallLog.FORMATTED_NUMBER)
+            .useSingleValueString(AnnotatedCallLog.PHONE_ACCOUNT_LABEL)
+            .useSingleValueLong(AnnotatedCallLog.PHONE_ACCOUNT_COLOR)
             .combine();
 
     CallTypes.Builder callTypes = CallTypes.newBuilder();
@@ -245,7 +248,7 @@
           long id = cursor.getLong(idColumn);
           long date = cursor.getLong(dateColumn);
           String numberAsStr = cursor.getString(numberColumn);
-          long type = cursor.getType(typeColumn);
+          long type = cursor.getInt(typeColumn);
           String countryIso = cursor.getString(countryIsoColumn);
           String formattedNumber = cursor.getString(cachedFormattedNumberColumn);
           int cachedNumberType = cursor.getInt(cachedNumberTypeColumn);
@@ -311,9 +314,12 @@
     }
     contentValues.put(AnnotatedCallLog.PHONE_ACCOUNT_LABEL, label);
 
-    int color = PhoneAccountUtils.getAccountColor(appContext, phoneAccountHandle);
+    @ColorInt int color = PhoneAccountUtils.getAccountColor(appContext, phoneAccountHandle);
     if (color == PhoneAccount.NO_HIGHLIGHT_COLOR) {
-      color = R.color.dialer_secondary_text_color;
+      color =
+          appContext
+              .getResources()
+              .getColor(R.color.dialer_secondary_text_color, appContext.getTheme());
     }
     contentValues.put(AnnotatedCallLog.PHONE_ACCOUNT_COLOR, color);
   }
diff --git a/java/com/android/dialer/calllog/datasources/util/RowCombiner.java b/java/com/android/dialer/calllog/datasources/util/RowCombiner.java
index 3595a05..adb7a07 100644
--- a/java/com/android/dialer/calllog/datasources/util/RowCombiner.java
+++ b/java/com/android/dialer/calllog/datasources/util/RowCombiner.java
@@ -19,6 +19,7 @@
 import com.android.dialer.common.Assert;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Objects;
 
 /** Convenience class for aggregating row values. */
 public class RowCombiner {
@@ -48,11 +49,19 @@
     String singleValue = iterator.next().getAsString(columnName);
     while (iterator.hasNext()) {
       String current = iterator.next().getAsString(columnName);
-      if (current == null) {
-        Assert.checkState(singleValue == null);
-      } else {
-        Assert.checkState(current.equals(singleValue));
-      }
+      Assert.checkState(Objects.equals(singleValue, current), "Values different for " + columnName);
+    }
+    combinedRow.put(columnName, singleValue);
+    return this;
+  }
+
+  /** Asserts that all column values for the given column name are the same, and uses it. */
+  public RowCombiner useSingleValueLong(String columnName) {
+    Iterator<ContentValues> iterator = individualRowsSortedByTimestampDesc.iterator();
+    Long singleValue = iterator.next().getAsLong(columnName);
+    while (iterator.hasNext()) {
+      Long current = iterator.next().getAsLong(columnName);
+      Assert.checkState(Objects.equals(singleValue, current), "Values different for " + columnName);
     }
     combinedRow.put(columnName, singleValue);
     return this;
diff --git a/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java b/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java
index 51a5532..0dacece 100644
--- a/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java
+++ b/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java
@@ -18,9 +18,12 @@
 
 import android.content.Context;
 import android.database.Cursor;
+import android.support.annotation.ColorInt;
+import android.support.annotation.NonNull;
 import android.support.v4.content.CursorLoader;
 import com.android.dialer.CallTypes;
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.CoalescedAnnotatedCallLog;
+import com.android.dialer.common.Assert;
 import com.google.protobuf.InvalidProtocolBufferException;
 
 /** CursorLoader for the coalesced annotated call log. */
@@ -89,6 +92,7 @@
       return cursor.getString(PHONE_ACCOUNT_LABEL);
     }
 
+    @ColorInt
     int phoneAccountColor() {
       return cursor.getInt(PHONE_ACCOUNT_COLOR);
     }
@@ -113,8 +117,13 @@
       return cursor.getString(FORMATTED_NUMBER);
     }
 
-    CallTypes callTypes() throws InvalidProtocolBufferException {
-      return CallTypes.parseFrom(cursor.getBlob(CALL_TYPES));
+    @NonNull
+    CallTypes callTypes() {
+      try {
+        return CallTypes.parseFrom(cursor.getBlob(CALL_TYPES));
+      } catch (InvalidProtocolBufferException e) {
+        throw Assert.createAssertionFailException("Couldn't parse call types", e);
+      }
     }
   }
 
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
index b6b658f..58c98f6 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java
@@ -23,9 +23,12 @@
 import android.view.View;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
+import com.android.dialer.calllog.ui.CoalescedAnnotatedCallLogCursorLoader.Row;
 import com.android.dialer.calllogutils.CallLogDates;
+import com.android.dialer.calllogutils.CallTypeIconsView;
 import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.lettertile.LetterTileDrawable;
+import com.android.dialer.oem.MotorolaUtils;
 import com.android.dialer.time.Clock;
 import java.util.Locale;
 
@@ -36,6 +39,9 @@
   private final TextView primaryTextView;
   private final TextView secondaryTextView;
   private final QuickContactBadge quickContactBadge;
+  private final CallTypeIconsView primaryCallTypeIconsView; // Used for Wifi, HD icons
+  private final CallTypeIconsView secondaryCallTypeIconsView; // Used for call types
+  private final TextView phoneAccountView;
   private final Clock clock;
 
   NewCallLogViewHolder(View view, Clock clock) {
@@ -44,6 +50,9 @@
     primaryTextView = view.findViewById(R.id.primary_text);
     secondaryTextView = view.findViewById(R.id.secondary_text);
     quickContactBadge = view.findViewById(R.id.quick_contact_photo);
+    primaryCallTypeIconsView = view.findViewById(R.id.primary_call_type_icons);
+    secondaryCallTypeIconsView = view.findViewById(R.id.secondary_call_type_icons);
+    phoneAccountView = view.findViewById(R.id.phone_account);
     this.clock = clock;
   }
 
@@ -52,8 +61,6 @@
     CoalescedAnnotatedCallLogCursorLoader.Row row =
         new CoalescedAnnotatedCallLogCursorLoader.Row(cursor);
 
-    // TODO(zachh): Add HD icon and Wifi icon after primary text.
-    // TODO(zachh): Call type icons for last 3 calls.
     // TODO(zachh): Use name for primary text if available.
     // TODO(zachh): Handle CallLog.Calls.PRESENTATION_*, including Verizon restricted numbers.
     // TODO(zachh): Handle RTL properly.
@@ -68,6 +75,9 @@
     }
 
     setPhoto();
+    setPrimaryCallTypes(row);
+    setSecondaryCallTypes(row);
+    setPhoneAccounts(row);
   }
 
   private String buildPrimaryText(CoalescedAnnotatedCallLogCursorLoader.Row row) {
@@ -130,4 +140,28 @@
         .loadDialerThumbnailOrPhoto(
             quickContactBadge, null, 0, null, null, LetterTileDrawable.TYPE_DEFAULT);
   }
+
+  private void setPrimaryCallTypes(Row row) {
+    // Only HD and Wifi icons are shown following the primary text.
+    primaryCallTypeIconsView.setShowHd(
+        MotorolaUtils.shouldShowHdIconInCallLog(context, row.features()));
+    primaryCallTypeIconsView.setShowWifi(
+        MotorolaUtils.shouldShowWifiIconInCallLog(context, row.features()));
+  }
+
+  private void setSecondaryCallTypes(Row row) {
+    // Only call type icons are shown before the secondary text.
+    for (int callType : row.callTypes().getTypeList()) {
+      secondaryCallTypeIconsView.add(callType);
+    }
+    // TODO(zachh): Per new mocks, may need to add method to CallTypeIconsView to disable coloring.
+  }
+
+  private void setPhoneAccounts(Row row) {
+    if (row.phoneAccountLabel() != null) {
+      phoneAccountView.setText(row.phoneAccountLabel());
+      phoneAccountView.setTextColor(row.phoneAccountColor());
+      phoneAccountView.setVisibility(View.VISIBLE);
+    }
+  }
 }
diff --git a/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml
index 568b351..77ba681 100644
--- a/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml
+++ b/java/com/android/dialer/calllog/ui/res/layout/new_call_log_entry.xml
@@ -42,19 +42,52 @@
       android:layout_toStartOf="@+id/menu_button"
       android:orientation="vertical">
 
-    <TextView
-        android:id="@+id/primary_text"
-        style="@style/PrimaryText"
+    <!-- TODO(zachh): Optimize this layout -->
+    <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginStart="@dimen/call_log_entry_photo_text_margin"/>
+        android:orientation="horizontal">
 
-    <TextView
-        android:id="@+id/secondary_text"
-        style="@style/SecondaryText"
+      <TextView
+          android:id="@+id/primary_text"
+          style="@style/PrimaryText"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_marginStart="@dimen/call_log_entry_photo_text_margin"/>
+
+      <!-- HD and Wifi icons are shown adjacent to primary text. Call types are shown adjacent to
+           secondary text (below). -->
+      <com.android.dialer.calllogutils.CallTypeIconsView
+          android:id="@+id/primary_call_type_icons"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_marginStart="12dp"
+          android:layout_gravity="center_vertical"/>
+
+    </LinearLayout>
+
+    <!-- TODO(zachh): Optimize this layout -->
+    <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginStart="@dimen/call_log_entry_photo_text_margin"/>
+        android:orientation="horizontal">
+
+      <!-- Only call types are shown adjacent to secondary text. HD and Wifi icons are shown
+           adjacent to primary text (above). -->
+      <com.android.dialer.calllogutils.CallTypeIconsView
+          android:id="@+id/secondary_call_type_icons"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_marginStart="12dp"
+          android:layout_gravity="center_vertical"/>
+
+      <TextView
+          android:id="@+id/secondary_text"
+          style="@style/SecondaryText"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_marginStart="@dimen/call_log_entry_photo_text_margin"/>
+    </LinearLayout>
 
     <TextView
         android:id="@+id/phone_account"
diff --git a/java/com/android/dialer/contactsfragment/ContactsFragment.java b/java/com/android/dialer/contactsfragment/ContactsFragment.java
index 86ac834..0e76086 100644
--- a/java/com/android/dialer/contactsfragment/ContactsFragment.java
+++ b/java/com/android/dialer/contactsfragment/ContactsFragment.java
@@ -16,6 +16,9 @@
 
 package com.android.dialer.contactsfragment;
 
+import static com.android.dialer.contactsfragment.ContactsFragment.Header.ADD_CONTACT;
+import static com.android.dialer.contactsfragment.ContactsFragment.Header.NONE;
+
 import android.app.Fragment;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Loader;
@@ -67,9 +70,7 @@
 
   /** An enum for the different types of headers that be inserted at position 0 in the list. */
   @Retention(RetentionPolicy.SOURCE)
-  @IntDef({
-  ContactsFragment.Header.NONE,
-  ContactsFragment.Header.ADD_CONTACT})
+  @IntDef({NONE, ADD_CONTACT})
   public @interface Header {
     int NONE = 0;
     /** Header that allows the user to add a new contact. */
diff --git a/java/com/android/dialer/strictmode/DialerStrictMode.java b/java/com/android/dialer/strictmode/DialerStrictMode.java
index c7d0b3f..f895f7c 100644
--- a/java/com/android/dialer/strictmode/DialerStrictMode.java
+++ b/java/com/android/dialer/strictmode/DialerStrictMode.java
@@ -145,5 +145,3 @@
     runnable.run();
   }
 }
-
-
