diff --git a/res/layout/quickcontact_suggestion_card.xml b/res/layout/quickcontact_suggestion_card.xml
index 45e316b..1419bc8 100644
--- a/res/layout/quickcontact_suggestion_card.xml
+++ b/res/layout/quickcontact_suggestion_card.xml
@@ -126,11 +126,11 @@
             android:visibility="gone"/>
 
         <Button
-            android:id="@+id/merge_button"
+            android:id="@+id/link_button"
             style="?android:attr/buttonBarButtonStyle"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="@string/quickcontact_suggestion_merge_button"
+            android:text="@string/quickcontact_suggestion_link_button"
             android:textColor="@color/quickcontact_entry_sub_header_text_color"
             android:paddingStart="@dimen/quickcontact_suggestion_card_image_spacing"/>
     </LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 680a984..ed9d468 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -127,7 +127,7 @@
     <string name="menu_sendSMS">Text contact</string>
 
     <!-- Menu item that splits an item from the contact detail into a separate aggregate -->
-    <string name="menu_splitAggregate">Separate</string>
+    <string name="menu_splitAggregate">Unlink</string>
 
     <!-- Menu item that edits the currently selected group [CHAR LIMIT=30] -->
     <string name="menu_editGroup">Edit</string>
@@ -142,13 +142,13 @@
     <string name="menu_new_group_action_bar">Add Group</string>
 
     <!-- Title of the confirmation dialog for separating contacts into multiple instances [CHAR LIMIT=26] -->
-    <string name="splitConfirmation_title">Separate contact?</string>
+    <string name="splitConfirmation_title">Unlink contact?</string>
 
-    <!-- Confirmation dialog for separating contacts into multiple instances [CHAR LIMIT=NONE] -->
-    <string name="splitConfirmation">This contact will be separated into multiple contacts.</string>
+    <!-- Confirmation dialog for unlinking contacts into multiple instances [CHAR LIMIT=NONE] -->
+    <string name="splitConfirmation">This contact will be unlinked into multiple contacts.</string>
 
     <!-- Menu item that joins an aggregate with another aggregate -->
-    <string name="menu_joinAggregate">Merge</string>
+    <string name="menu_joinAggregate">Link</string>
 
     <!-- Menu item (in the action bar) to indicate that changes should be saved [CHAR LIMIT=20] -->
     <string name="menu_save">Save</string>
@@ -169,7 +169,7 @@
     <string name="separatorJoinAggregateAll">All contacts</string>
 
     <!-- Toast shown after two contacts have been joined by a user action. [CHAR LIMIT=NONE] -->
-    <string name="contactsJoinedMessage">Contacts merged</string>
+    <string name="contactsJoinedMessage">Contacts linked</string>
 
     <!-- Toast shown after contacts that the user has selected are deleted by a user action. [CHAR LIMIT=NONE] -->
     <string name="contacts_deleted_toast">Contacts deleted</string>
@@ -186,11 +186,11 @@
     <!-- Warning dialog contents after users selects to delete a contact with ReadOnly and Writable sources. -->
     <string name="readOnlyContactDeleteConfirmation">This contact contains information from multiple accounts. Information from read-only accounts will be hidden in your contacts lists, not deleted.</string>
 
-    <!-- Warning dialog. Shown if user selects a single contact to merge. [CHAR LIMIT=NONE]  -->
-    <string name="batch_merge_single_contact_warning">You need at least two contacts selected to perform a merge.</string>
+    <!-- Warning dialog. Shown if user selects a single contact to link. [CHAR LIMIT=NONE]  -->
+    <string name="batch_link_single_contact_warning">You need at least two contacts selected to perform a link.</string>
 
-    <!-- Confirmation dialog. Shown after user selects to merge contacts. [CHAR LIMIT=NONE]  -->
-    <string name="batch_merge_confirmation">The selected contacts will be merged into a single contact.</string>
+    <!-- Confirmation dialog. Shown after user selects to link contacts. [CHAR LIMIT=NONE]  -->
+    <string name="batch_link_confirmation">The selected contacts will be linked into a single contact.</string>
 
     <!-- Confirmation dialog. Shown after user selects to delete writable contacts. [CHAR LIMIT=NONE]  -->
     <string name="batch_delete_confirmation">The selected contacts will be deleted.</string>
@@ -466,11 +466,11 @@
     <!-- The title of the Edit-Contact screen -->
     <string name="edit_contact">Edit contact</string>
 
-    <!-- Shows how many contacts have been merged. The value 1 is not shown but should be translated
+    <!-- Shows how many contacts have been linked. The value 1 is not shown but should be translated
          anyway if we change our mind later -->
-    <plurals name="merge_info">
-        <item quantity="one">not merged</item>
-        <item quantity="other">merged from <xliff:g id="count">%0$d</xliff:g> sources</item>
+    <plurals name="link_info">
+        <item quantity="one">not linked</item>
+        <item quantity="other">linked from <xliff:g id="count">%0$d</xliff:g> sources</item>
     </plurals>
 
     <!-- The message in a confirmation dialog shown when the user selects a
@@ -774,8 +774,8 @@
     <!-- 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>
 
-    <!-- Button used in quick contact suggestion card to merge selected contacts. [CHAR LIMIT=30]-->
-    <string name="quickcontact_suggestion_merge_button">Merge</string>
+    <!-- Button used in quick contact suggestion card to link selected contacts. [CHAR LIMIT=30]-->
+    <string name="quickcontact_suggestion_link_button">Link</string>
 
     <!-- Suggestions number in quick contact suggestion card [CHAR LIMIT=60] -->
     <plurals name="quickcontact_suggestions_number">
@@ -792,6 +792,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>
 
-    <!-- Merged contacts title showing in contact editor UI. [CHAR LIMIT=30]-->
-    <string name="compact_editor_linked_contacts_title">Merged contacts</string>
+    <!-- Linked contacts title showing in contact editor UI. [CHAR LIMIT=30]-->
+    <string name="compact_editor_linked_contacts_title">Linked contacts</string>
 </resources>
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index 058a66c..6c0ff85 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -19,8 +19,6 @@
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.R;
 import com.android.contacts.activities.CompactContactEditorActivity;
-import com.android.contacts.activities.ContactEditorActivity;
-import com.android.contacts.activities.ContactEditorBaseActivity;
 import com.android.contacts.common.model.RawContactDelta;
 import com.android.contacts.common.model.ValuesDelta;
 import com.android.contacts.common.model.account.AccountWithDataSet;
@@ -82,16 +80,6 @@
     }
 
     @Override
-    public void onStop() {
-        super.onStop();
-
-        // If anything was left unsaved, save it now
-        if (!getActivity().isChangingConfigurations() && mStatus == Status.EDITING) {
-            save(SaveMode.RELOAD);
-        }
-    }
-
-    @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == android.R.id.home) {
             return revert();
@@ -212,9 +200,7 @@
         if (activity == null || activity.isFinishing()) {
             return;
         }
-        if (!mIsUserProfile) {
-            acquireAggregationSuggestions(activity, rawContactId, valuesDelta);
-        }
+        acquireAggregationSuggestions(activity, rawContactId, valuesDelta);
     }
 
     @Override
diff --git a/src/com/android/contacts/editor/CompactKindSectionView.java b/src/com/android/contacts/editor/CompactKindSectionView.java
index 3ebe27b..fffe464 100644
--- a/src/com/android/contacts/editor/CompactKindSectionView.java
+++ b/src/com/android/contacts/editor/CompactKindSectionView.java
@@ -16,6 +16,13 @@
 
 package com.android.contacts.editor;
 
+import com.android.contacts.R;
+import com.android.contacts.common.model.RawContactDelta;
+import com.android.contacts.common.model.RawContactModifier;
+import com.android.contacts.common.model.ValuesDelta;
+import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.common.model.dataitem.DataKind;
+
 import android.content.Context;
 import android.database.Cursor;
 import android.provider.ContactsContract.CommonDataKinds.Event;
@@ -30,14 +37,6 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.dataitem.DataKind;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -152,6 +151,7 @@
     private ViewIdGenerator mViewIdGenerator;
     private CompactRawContactsEditorView.Listener mListener;
 
+    private boolean mIsUserProfile;
     private boolean mShowOneEmptyEditor = false;
     private boolean mHideIfEmpty = true;
 
@@ -190,6 +190,10 @@
         mIcon = (ImageView) findViewById(R.id.kind_icon);
     }
 
+    public void setIsUserProfile(boolean isUserProfile) {
+        mIsUserProfile = isUserProfile;
+    }
+
     /**
      * @param showOneEmptyEditor If true, we will always show one empty editor, otherwise an empty
      *         editor will not be shown until the user enters a value.  Note, this does not apply
@@ -364,8 +368,11 @@
         // Structured name
         final StructuredNameEditorView nameView = (StructuredNameEditorView) mLayoutInflater
                 .inflate(R.layout.structured_name_editor_view, mEditors, /* attachToRoot =*/ false);
-        nameView.setEditorListener(new StructuredNameEditorListener(valuesDelta,
-                rawContactDelta.getRawContactId(), mListener));
+        if (!mIsUserProfile) {
+            // Don't set super primary for the me contact
+            nameView.setEditorListener(new StructuredNameEditorListener(
+                    valuesDelta, rawContactDelta.getRawContactId(), mListener));
+        }
         nameView.setDeletable(false);
         nameView.setValues(
                 accountType.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME),
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
index 88894ec..9d5ff55 100644
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -30,9 +30,7 @@
 import com.android.contacts.util.UiClosables;
 
 import android.content.ContentUris;
-import android.content.ContentValues;
 import android.content.Context;
-import android.content.Intent;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.net.Uri;
@@ -68,16 +66,15 @@
 import android.widget.ListPopupWindow;
 import android.widget.TextView;
 
-import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
-import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.TreeSet;
 
 /**
@@ -124,7 +121,7 @@
         public void onEditorsBound();
 
         /**
-         * Invoked when a rawcontact from merged contacts is selected in editor.
+         * Invoked when a rawcontact from linked contacts is selected in editor.
          */
         public void onRawContactSelected(Uri uri, long rawContactId, boolean isReadOnly);
 
@@ -169,8 +166,12 @@
             // 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);
-            text2.setText(accountName);
-            text2.setEllipsize(TextUtils.TruncateAt.MIDDLE);
+            if (TextUtils.isEmpty(accountName)) {
+                text2.setVisibility(View.GONE);
+            } else {
+                text2.setText(accountName);
+                text2.setEllipsize(TextUtils.TruncateAt.MIDDLE);
+            }
 
             final ImageView icon = (ImageView) resultView.findViewById(android.R.id.icon);
             icon.setImageDrawable(accountType.getDisplayIcon(mContext));
@@ -502,7 +503,7 @@
     }
 
     public void removePhoto() {
-        mPhotoValuesDelta.setFromTemplate(false);
+        mPhotoValuesDelta.setFromTemplate(true);
         mPhotoValuesDelta.put(Photo.PHOTO, (byte[]) null);
 
         mPhotoView.removePhoto();
@@ -516,11 +517,15 @@
     }
 
     public void updatePhoto(Uri photoUri) {
-        // Unset primary for all photos
-        unsetSuperPrimary();
+        mPhotoValuesDelta.setFromTemplate(false);
 
-        // Mark the currently displayed photo as primary
-        mPhotoValuesDelta.setSuperPrimary(true);
+        if (!mIsUserProfile) {
+            // Unset primary for all photos
+            unsetSuperPrimary();
+
+            // Mark the currently displayed photo as primary
+            mPhotoValuesDelta.setSuperPrimary(true);
+        }
 
         // Even though high-res photos cannot be saved by passing them via
         // an EntityDeltaList (since they cause the Bundle size limit to be
@@ -618,9 +623,6 @@
      * UI.
      */
     public void setPrimaryPhoto(CompactPhotoSelectionFragment.Photo photo) {
-        // Unset primary for all photos
-        unsetSuperPrimary();
-
         // Find the values delta to mark as primary
         final KindSectionDataList kindSectionDataList =
                 mKindSectionDataMap.get(Photo.CONTENT_ITEM_TYPE);
@@ -638,7 +640,13 @@
         }
         final ValuesDelta valuesDelta = valuesDeltaList.get(photo.valuesDeltaListIndex);
         valuesDelta.setFromTemplate(false);
-        valuesDelta.setSuperPrimary(true);
+
+        if (!mIsUserProfile) {
+            // Unset primary for all other photos
+            unsetSuperPrimary();
+
+            valuesDelta.setSuperPrimary(true);
+        }
 
         // Update the UI
         mPhotoView.setPhoto(valuesDelta, mMaterialPalette);
@@ -880,6 +888,8 @@
     private void addRawContactAccountSelector(final RawContactDeltaList rawContactDeltas) {
         mRawContactContainer.setVisibility(View.VISIBLE);
 
+        Collections.sort(rawContactDeltas, new RawContactDeltaComparator(getContext()));
+
         final String accountsSummary = getRawContactsAccountsSummary(
                 getContext(), rawContactDeltas);
         mRawContactSummary.setText(accountsSummary);
@@ -929,7 +939,7 @@
 
     private static String getRawContactsAccountsSummary(
             Context context, RawContactDeltaList rawContactDeltas) {
-        final Map<String, Integer> accountTypeNumber = new HashMap<>();
+        final LinkedHashMap<String, Integer> accountTypeNumber = new LinkedHashMap<>();
         for (RawContactDelta rawContactDelta : rawContactDeltas) {
             if (rawContactDelta.isVisible()) {
                 final AccountType accountType = rawContactDelta.getRawContactAccountType(context);
@@ -944,7 +954,7 @@
             }
         }
 
-        final Set<String> linkedAccounts = new HashSet<>();
+        final LinkedHashSet<String> linkedAccounts = new LinkedHashSet<>();
         for (String accountTypeLabel : accountTypeNumber.keySet()) {
             final String number = context.getResources().getQuantityString(
                     R.plurals.quickcontact_suggestion_account_type_number,
@@ -1006,6 +1016,14 @@
                 continue;
             }
 
+            // Don't show more than one group editor on the compact editor.
+            // Groups will still be editable for each raw contact individually on the full editor.
+            if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)
+                    && kindSectionDataList.size() > 1) {
+                vlog("kind: " + i + " " + mimeType + " dropped");
+                continue;
+            }
+
             if (kindSectionDataList != null && !kindSectionDataList.isEmpty()) {
                 vlog("kind: " + i + " " + mimeType + ": " + kindSectionDataList.size() +
                         " kindSectionData(s)");
@@ -1034,6 +1052,7 @@
         final CompactKindSectionView kindSectionView = (CompactKindSectionView)
                 mLayoutInflater.inflate(R.layout.compact_item_kind_section, viewGroup,
                         /* attachToRoot =*/ false);
+        kindSectionView.setIsUserProfile(mIsUserProfile);
 
         if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)
                 || Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
index 1e18e2c..718128b 100644
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -643,13 +643,7 @@
     @Override
     public void onStop() {
         super.onStop();
-
         UiClosables.closeQuietly(mAggregationSuggestionPopup);
-
-        // If anything was left unsaved, save it now but keep the editor open.
-        if (!getActivity().isChangingConfigurations() && mStatus == Status.EDITING) {
-            save(SaveMode.RELOAD);
-        }
     }
 
     @Override
@@ -1368,7 +1362,7 @@
             }
             mPhotoId = mIntentExtras.getLong(INTENT_EXTRA_PHOTO_ID);
             mRawContactIdToDisplayAlone = mIntentExtras.getLong(
-                    INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE);
+                    INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
             mRawContactDisplayAloneIsReadOnly = mIntentExtras.getBoolean(
                     INTENT_EXTRA_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY);
         }
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index c602a1d..a3830ef 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -114,7 +114,7 @@
             mCurrentPhotoUri = savedState.getParcelable(KEY_CURRENT_PHOTO_URI);
             mUpdatedPhotos = savedState.getParcelable(KEY_UPDATED_PHOTOS);
             mRawContactIdToDisplayAlone = savedState.getLong(
-                    ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE);
+                    ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
         }
     }
 
@@ -123,7 +123,7 @@
         super.load(action, lookupUri, intentExtras);
         if (intentExtras != null) {
             mRawContactIdToDisplayAlone = intentExtras.getLong(
-                    ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE);
+                    ContactEditorBaseFragment.INTENT_EXTRA_RAW_CONTACT_ID_TO_DISPLAY_ALONE, -1);
         }
     }
 
diff --git a/src/com/android/contacts/interactions/JoinContactsDialogFragment.java b/src/com/android/contacts/interactions/JoinContactsDialogFragment.java
index a9a1aa9..e5fd890 100644
--- a/src/com/android/contacts/interactions/JoinContactsDialogFragment.java
+++ b/src/com/android/contacts/interactions/JoinContactsDialogFragment.java
@@ -65,13 +65,13 @@
         if (contactIds.size() <= 1) {
             return new AlertDialog.Builder(getActivity())
                     .setIconAttribute(android.R.attr.alertDialogIcon)
-                    .setMessage(R.string.batch_merge_single_contact_warning)
+                    .setMessage(R.string.batch_link_single_contact_warning)
                     .setPositiveButton(android.R.string.ok, null)
                     .create();
         }
         return new AlertDialog.Builder(getActivity())
                 .setIconAttribute(android.R.attr.alertDialogIcon)
-                .setMessage(R.string.batch_merge_confirmation)
+                .setMessage(R.string.batch_link_confirmation)
                 .setNegativeButton(android.R.string.cancel, null)
                 .setPositiveButton(android.R.string.ok,
                         new DialogInterface.OnClickListener() {
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 39cf0ec..2f37387 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -253,7 +253,7 @@
     private ImageView mSuggestionExpansionButton;
     private LinearLayout mSuggestionList;
     private View mSuggestionSeparator;
-    private Button mSuggestionsMergeButton;
+    private Button mSuggestionsLinkButton;
     private boolean mIsSuggestionListCollapsed;
     private long mPreviousSuggestionForContactId = 0;
 
@@ -916,7 +916,7 @@
         mSuggestionExpansionButton = (ImageView) findViewById(R.id.expand_suggestion_button);
         mSuggestionSeparator = findViewById(R.id.title_separator2);
         mSuggestionList = (LinearLayout) findViewById(R.id.suggestion_list);
-        mSuggestionsMergeButton = (Button) findViewById(R.id.merge_button);
+        mSuggestionsLinkButton = (Button) findViewById(R.id.link_button);
         if (savedInstanceState != null) {
             mIsSuggestionListCollapsed = savedInstanceState.getBoolean(
                     KEY_IS_SUGGESTION_LIST_COLLAPSED, true);
@@ -928,7 +928,7 @@
         }
 
         mSuggestionExpansionButton.setClickable(true);
-        mSuggestionsMergeButton.setOnClickListener(new OnClickListener() {
+        mSuggestionsLinkButton.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View view) {
                 // Join selected contacts.
@@ -1321,8 +1321,10 @@
         } else {
             expandSuggestionList();
         }
-        mSuggestionCardView.setVisibility(View.GONE);
-        mSuggestionList.removeAllViews();
+        if (mPreviousSuggestionForContactId != mContactData.getId()) {
+            mSuggestionCardView.setVisibility(View.GONE);
+            mSuggestionList.removeAllViews();
+        }
 
         if (mAggregationSuggestionEngine == null) {
             mAggregationSuggestionEngine = new AggregationSuggestionEngine(this);
