diff --git a/res/drawable-hdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-hdpi/ic_link_grey600_drawable_24dp.png
new file mode 100644
index 0000000..31fcce2
--- /dev/null
+++ b/res/drawable-hdpi/ic_link_grey600_drawable_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-mdpi/ic_link_grey600_drawable_24dp.png
new file mode 100644
index 0000000..65997eb
--- /dev/null
+++ b/res/drawable-mdpi/ic_link_grey600_drawable_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-xhdpi/ic_link_grey600_drawable_24dp.png
new file mode 100644
index 0000000..9f37410
--- /dev/null
+++ b/res/drawable-xhdpi/ic_link_grey600_drawable_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-xxhdpi/ic_link_grey600_drawable_24dp.png
new file mode 100644
index 0000000..140daef
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_link_grey600_drawable_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-xxxhdpi/ic_link_grey600_drawable_24dp.png
new file mode 100644
index 0000000..6fe9b8c
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_link_grey600_drawable_24dp.png
Binary files differ
diff --git a/res/layout/editor_all_rawcontacts_accounts_selector.xml b/res/layout/editor_all_rawcontacts_accounts_selector.xml
index 3b92c9f..e400f3b 100644
--- a/res/layout/editor_all_rawcontacts_accounts_selector.xml
+++ b/res/layout/editor_all_rawcontacts_accounts_selector.xml
@@ -28,42 +28,22 @@
         android:visibility="gone" >
 
     <ImageView
-            android:id="@+id/primary_account_icon"
-            android:src="@drawable/ic_account_circle_black_24dp"
+            android:src="@drawable/ic_link_grey600_drawable_24dp"
             android:layout_width="@dimen/detail_network_icon_size"
             android:layout_height="@dimen/detail_network_icon_size"
             android:layout_margin="16dip"
             android:layout_gravity="center_vertical"/>
 
-    <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
+    <TextView
+            android:id="@+id/rawcontacts_accounts_summary"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:textSize="16sp"
+            android:singleLine="true"
+            android:textColor="@color/primary_text_color"
             android:layout_gravity="center_vertical"
-            android:layout_weight="1">
-
-        <TextView
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:text="@string/compact_editor_linked_contacts_title"
-                android:textSize="16sp"
-                android:singleLine="true"
-                android:textColor="@color/primary_text_color"
-                android:layout_gravity="center_vertical"
-                android:gravity="center_vertical"
-                android:ellipsize="end" />
-
-        <TextView
-                android:id="@+id/rawcontacts_accounts_summary"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:textSize="16sp"
-                android:singleLine="true"
-                android:textColor="@color/primary_text_color"
-                android:layout_gravity="center_vertical"
-                android:gravity="center_vertical"
-                android:ellipsize="end" />
-    </LinearLayout>
+            android:gravity="center_vertical"
+            android:ellipsize="end" />
 
     <ImageView
             android:src="@drawable/ic_menu_expander_minimized_holo_light"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e440ab5..3102bf8 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -764,6 +764,12 @@
     <!-- Toast message displayed when the editor fails to load for a contacts. [CHAR LIMIT=NONE] -->
     <string name="compact_editor_failed_to_load">Failed to open editor.</string>
 
+    <!-- Label for the account selector to indicate which account a contact will be saved to. [CHAR LIMIT=30] -->
+    <string name="compact_editor_account_selector_title">Saving to</string>
+
+    <!-- Label for the linked contacts selector which indicates the number of raw contacts which have been linked together into the aggregate being viewed. [CHAR LIMIT=40] -->
+    <string name="compact_editor_linked_contacts_selector_title">Linked contacts (<xliff:g id="count">%d</xliff:g>)</string>
+
     <!-- Quick contact display name with phonetic name -->
     <string name="quick_contact_display_name_with_phonetic"><xliff:g id="display_name">%s</xliff:g> (<xliff:g id="phonetic_name">%s</xliff:g>)</string>
 
@@ -794,9 +800,6 @@
     <!-- Account type with number in quick contact suggestion card [CHAR LIMIT=30]-->
     <string name="quickcontact_suggestion_account_type"><xliff:g id="account_type">%s</xliff:g><xliff:g id="account_type_number">%s</xliff:g></string>
 
-    <!-- Linked contacts title showing in contact editor UI. [CHAR LIMIT=30]-->
-    <string name="compact_editor_linked_contacts_title">Linked contacts</string>
-
     <!-- "This contact" title showing in suggestion card in Quick contact. [CHAR LIMIT=30]-->
     <string name="suggestion_card_this_contact_title">This contact</string>
 
@@ -805,4 +808,5 @@
 
     <!-- Help message showing in suggestion card in Quick contact. [CHAR LIMIT=500]-->
     <string name="suggestion_card_help_message">Clean up duplicate contacts to see all info in one place. For more details on a contact tap on the avatar. You can always change the profile photo or separate contacts at anytime.</string>
+
 </resources>
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
index 386a6b3..e02e35a 100644
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -72,8 +72,6 @@
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeSet;
@@ -158,18 +156,17 @@
                     : mInflater.inflate(R.layout.account_selector_list_item, parent, false);
 
             final RawContactDelta rawContactDelta = mRawContactDeltas.get(position);
-            final String accountName = rawContactDelta.getAccountName();
-            final AccountType accountType = rawContactDelta.getRawContactAccountType(mContext);
 
             final TextView text1 = (TextView) resultView.findViewById(android.R.id.text1);
+            final AccountType accountType = rawContactDelta.getRawContactAccountType(mContext);
             text1.setText(accountType.getDisplayLabel(mContext));
 
-            // For email addresses, we don't want to truncate at end, which might cut off the domain
-            // name.
             final TextView text2 = (TextView) resultView.findViewById(android.R.id.text2);
+            final String accountName = rawContactDelta.getAccountName();
             if (TextUtils.isEmpty(accountName)) {
                 text2.setVisibility(View.GONE);
             } else {
+                // Truncate email addresses in the middle so we don't lose the domain
                 text2.setText(accountName);
                 text2.setEllipsize(TextUtils.TruncateAt.MIDDLE);
             }
@@ -399,7 +396,6 @@
     // Raw contacts selector
     private View mRawContactContainer;
     private TextView mRawContactSummary;
-    private ImageView mPrimaryAccountIcon;
 
     private CompactPhotoEditorView mPhotoView;
     private ViewGroup mKindSectionViews;
@@ -450,7 +446,6 @@
         // Raw contacts selector
         mRawContactContainer = findViewById(R.id.all_rawcontacts_accounts_container);
         mRawContactSummary = (TextView) findViewById(R.id.rawcontacts_accounts_summary);
-        mPrimaryAccountIcon = (ImageView) findViewById(R.id.primary_account_icon);
 
         mPhotoView = (CompactPhotoEditorView) findViewById(R.id.photo_editor);
         mKindSectionViews = (LinearLayout) findViewById(R.id.kind_section_views);
@@ -819,7 +814,10 @@
             mAccountHeaderName.setVisibility(View.VISIBLE);
             mAccountHeaderName.setText(accountInfo.first);
         }
-        mAccountHeaderType.setText(accountInfo.second);
+
+        final String selectorTitle = getResources().getString(
+                R.string.compact_editor_account_selector_title);
+        mAccountHeaderType.setText(selectorTitle);
 
         final AccountType primaryAccountType = mPrimaryRawContactDelta.getRawContactAccountType(
                 getContext());
@@ -827,7 +825,7 @@
 
         mAccountHeaderContainer.setContentDescription(
                 EditorUiUtils.getAccountInfoContentDescription(
-                        accountInfo.first, accountInfo.second));
+                        accountInfo.first, selectorTitle));
     }
 
     private void addAccountSelector(Pair<String,String> accountInfo) {
@@ -840,11 +838,14 @@
             mAccountSelectorName.setVisibility(View.VISIBLE);
             mAccountSelectorName.setText(accountInfo.first);
         }
-        mAccountSelectorType.setText(accountInfo.second);
+
+        final String selectorTitle = getResources().getString(
+                R.string.compact_editor_account_selector_title);
+        mAccountSelectorType.setText(selectorTitle);
 
         mAccountSelectorContainer.setContentDescription(
                 EditorUiUtils.getAccountInfoContentDescription(
-                        accountInfo.first, accountInfo.second));
+                        accountInfo.first, selectorTitle));
 
         mAccountSelector.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -883,15 +884,9 @@
 
         Collections.sort(rawContactDeltas, new RawContactDeltaComparator(getContext()));
 
-        final String accountsSummary = getRawContactsAccountsSummary(
-                getContext(), rawContactDeltas);
+        final String accountsSummary = getResources().getString(
+                R.string.compact_editor_linked_contacts_selector_title, rawContactDeltas.size());
         mRawContactSummary.setText(accountsSummary);
-        mRawContactContainer.setContentDescription(accountsSummary);
-        if (mPrimaryRawContactDelta != null) {
-            final AccountType primaryAccountType = mPrimaryRawContactDelta.getRawContactAccountType(
-                    getContext());
-            mPrimaryAccountIcon.setImageDrawable(primaryAccountType.getDisplayIcon(getContext()));
-        }
 
         mRawContactContainer.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -930,38 +925,6 @@
         });
     }
 
-    private static String getRawContactsAccountsSummary(
-            Context context, RawContactDeltaList rawContactDeltas) {
-        final LinkedHashMap<String, Integer> accountTypeNumber = new LinkedHashMap<>();
-        for (RawContactDelta rawContactDelta : rawContactDeltas) {
-            if (rawContactDelta.isVisible()) {
-                final AccountType accountType = rawContactDelta.getRawContactAccountType(context);
-                final String accountTypeLabel = accountType.getDisplayLabel(context).toString();
-                if (accountTypeNumber.containsKey(accountTypeLabel)) {
-                    int number = accountTypeNumber.get(accountTypeLabel);
-                    number++;
-                    accountTypeNumber.put(accountTypeLabel, number);
-                } else {
-                    accountTypeNumber.put(accountTypeLabel, 1);
-                }
-            }
-        }
-
-        final LinkedHashSet<String> linkedAccounts = new LinkedHashSet<>();
-        for (String accountTypeLabel : accountTypeNumber.keySet()) {
-            final String number = context.getResources().getQuantityString(
-                    R.plurals.quickcontact_suggestion_account_type_number,
-                    accountTypeNumber.get(accountTypeLabel),
-                    accountTypeNumber.get(accountTypeLabel));
-            final String accountWithNumber = context.getResources().getString(
-                    R.string.quickcontact_suggestion_account_type,
-                    accountTypeLabel,
-                    number);
-            linkedAccounts.add(accountWithNumber);
-        }
-        return TextUtils.join(",", linkedAccounts);
-    }
-
     private void addPhotoView() {
         // Get the kind section data and values delta that we will display in the photo view
         final KindSectionDataList kindSectionDataList =
