diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index 5145416..cfed52a 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -26,6 +26,7 @@
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.util.MaterialColorMapUtils;
 import com.android.contacts.detail.PhotoSelectionHandler;
+import com.android.contacts.editor.Editor.EditorListener;
 import com.android.contacts.util.ContactPhotoUtils;
 
 import android.app.Activity;
@@ -204,16 +205,44 @@
             return;
         }
 
+        // Add input fields for the loaded Contact
         final CompactRawContactsEditorView editorView = getContent();
         editorView.setListener(this);
         editorView.setState(mState, mMaterialPalette, mViewIdGenerator);
-        editorView.setEnabled(isEnabled());
-        editorView.setVisibility(View.VISIBLE);
 
+        // Set up the photo widget
         mPhotoHandler = createPhotoHandler();
         mPhotoRawContactId = editorView.getPhotoRawContactId();
         editorView.setPhotoHandler(mPhotoHandler);
 
+        // Attach the aggregation suggestion engine to the structured name field
+        final StructuredNameEditorView nameEditorView = editorView.getStructuredNameEditorView();
+        if (nameEditorView != null) {
+            nameEditorView.setEditorListener(new EditorListener() {
+                @Override
+                public void onRequest(int request) {
+                    final Activity activity = getActivity();
+                    if (activity == null || activity.isFinishing()) {
+                        return;
+                    }
+                    if (request == EditorListener.FIELD_CHANGED && !mIsUserProfile) {
+                        acquireAggregationSuggestions(activity, nameEditorView.getRawContactId(),
+                                nameEditorView.getValues());
+                    }
+                }
+
+                @Override
+                public void onDeleteRequested(Editor editor) {
+                }
+            });
+        }
+
+        // The editor is ready now so make it visible
+        editorView.setEnabled(isEnabled());
+        editorView.setVisibility(View.VISIBLE);
+
+        // Refresh the ActionBar as the visibility of the join command
+        // Activity can be null if we have been detached from the Activity.
         invalidateOptionsMenu();
     }
 
@@ -268,6 +297,11 @@
     }
 
     @Override
+    protected View getAggregationAnchorView(long rawContactId) {
+        return getContent().getAggregationAnchorView();
+    }
+
+    @Override
     protected void setGroupMetaData() {
         // The compact editor does not support groups.
     }
diff --git a/src/com/android/contacts/editor/CompactPhotoEditorView.java b/src/com/android/contacts/editor/CompactPhotoEditorView.java
index 38e4f87..86a0ee8 100644
--- a/src/com/android/contacts/editor/CompactPhotoEditorView.java
+++ b/src/com/android/contacts/editor/CompactPhotoEditorView.java
@@ -149,7 +149,7 @@
                     photoWidth = (int) (photoHeight * mLandscapePhotoRatio);
                 } else {
                     // Make the photo a square
-                    photoHeight = getHeight();
+                    photoHeight = getWidth();
                     photoWidth = photoHeight;
                 }
                 final ViewGroup.LayoutParams layoutParams = getLayoutParams();
diff --git a/src/com/android/contacts/editor/CompactRawContactsEditorView.java b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
index 44cf698..48e655b 100644
--- a/src/com/android/contacts/editor/CompactRawContactsEditorView.java
+++ b/src/com/android/contacts/editor/CompactRawContactsEditorView.java
@@ -70,6 +70,7 @@
 
     private AccountTypeManager mAccountTypeManager;
     private LayoutInflater mLayoutInflater;
+
     private ViewIdGenerator mViewIdGenerator;
     private MaterialColorMapUtils.MaterialPalette mMaterialPalette;
 
@@ -82,7 +83,6 @@
     private ViewGroup mOther;
     private View mMoreFields;
 
-    // TODO: remove this after we handle account selection for photos
     private long mPhotoRawContactId;
 
     public CompactRawContactsEditorView(Context context) {
@@ -171,11 +171,25 @@
     /**
      * Get the raw contact ID for the CompactHeaderView photo.
      */
-    // TODO: remove me once we support multiple accounts
     public long getPhotoRawContactId() {
         return mPhotoRawContactId;
     }
 
+    public StructuredNameEditorView getStructuredNameEditorView() {
+        // We only ever show one StructuredName
+        return mNames.getChildCount() == 0
+                ? null : (StructuredNameEditorView) mNames.getChildAt(0);
+    }
+
+    public View getAggregationAnchorView() {
+        // Since there is only one structured name we can just return it as the anchor for
+        // the aggregation suggestions popup
+        if (mNames.getChildCount() == 0) {
+            return null;
+        }
+        return mNames.getChildAt(0).findViewById(R.id.anchor_view);
+    }
+
     public void setState(RawContactDeltaList rawContactDeltas,
             MaterialColorMapUtils.MaterialPalette materialPalette,
             ViewIdGenerator viewIdGenerator) {
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
index d2f8aa7..3ca492b 100644
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -1353,8 +1353,7 @@
      * Triggers an asynchronous search for aggregation suggestions.
      */
     protected void acquireAggregationSuggestions(Context context,
-            RawContactEditorView rawContactEditor) {
-        long rawContactId = rawContactEditor.getRawContactId();
+            long rawContactId, ValuesDelta valuesDelta) {
         if (mAggregationSuggestionsRawContactId != rawContactId
                 && mAggregationSuggestionView != null) {
             mAggregationSuggestionView.setVisibility(View.GONE);
@@ -1372,8 +1371,7 @@
 
         mAggregationSuggestionEngine.setContactId(getContactId());
 
-        LabeledEditorView nameEditor = rawContactEditor.getNameEditor();
-        mAggregationSuggestionEngine.onNameChange(nameEditor.getValues());
+        mAggregationSuggestionEngine.onNameChange(valuesDelta);
     }
 
     /**
@@ -1403,12 +1401,10 @@
             return;
         }
 
-        final RawContactEditorView rawContactView = (RawContactEditorView)
-                getRawContactEditorView(mAggregationSuggestionsRawContactId);
-        if (rawContactView == null) {
+        final View anchorView = getAggregationAnchorView(mAggregationSuggestionsRawContactId);
+        if (anchorView == null) {
             return; // Raw contact deleted?
         }
-        final View anchorView = rawContactView.findViewById(R.id.anchor_view);
         mAggregationSuggestionPopup = new ListPopupWindow(mContext, null);
         mAggregationSuggestionPopup.setAnchorView(anchorView);
         mAggregationSuggestionPopup.setWidth(anchorView.getWidth());
@@ -1432,20 +1428,10 @@
     }
 
     /**
-     * Finds raw contact editor view for the given rawContactId.
+     * Returns the raw contact editor view for the given rawContactId that should be used as the
+     * anchor for aggregation suggestions.
      */
-    private BaseRawContactEditorView getRawContactEditorView(long rawContactId) {
-        for (int i = 0; i < mContent.getChildCount(); i++) {
-            final View childView = mContent.getChildAt(i);
-            if (childView instanceof BaseRawContactEditorView) {
-                final BaseRawContactEditorView editor = (BaseRawContactEditorView) childView;
-                if (editor.getRawContactId() == rawContactId) {
-                    return editor;
-                }
-            }
-        }
-        return null;
-    }
+    abstract protected View getAggregationAnchorView(long rawContactId);
 
     /**
      * Whether the given raw contact ID matches the one used to last load aggregation
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index c87be34..eb2de3a 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -48,9 +48,6 @@
 import com.android.contacts.util.ContactPhotoUtils;
 import com.android.contacts.util.UiClosables;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
 import java.io.FileNotFoundException;
 import java.util.Collections;
 import java.util.HashMap;
@@ -252,7 +249,9 @@
                             return;
                         }
                         if (request == EditorListener.FIELD_CHANGED && !isEditingUserProfile()) {
-                            acquireAggregationSuggestions(activity, rawContactEditor);
+                            acquireAggregationSuggestions(activity,
+                                    rawContactEditor.getNameEditor().getRawContactId(),
+                                    rawContactEditor.getNameEditor().getValues());
                         } else if (request == EditorListener.EDITOR_FOCUS_CHANGED) {
                             adjustNameFieldsHintDarkness(rawContactEditor);
                         }
@@ -283,7 +282,9 @@
                 nickNameEditor.setEditorListener(listener);
 
                 if (isAggregationSuggestionRawContactId(rawContactId)) {
-                    acquireAggregationSuggestions(activity, rawContactEditor);
+                    acquireAggregationSuggestions(activity,
+                            rawContactEditor.getNameEditor().getRawContactId(),
+                            rawContactEditor.getNameEditor().getValues());
                 }
 
                 adjustNameFieldsHintDarkness(rawContactEditor);
@@ -497,6 +498,12 @@
     /**
      * Finds raw contact editor view for the given rawContactId.
      */
+    @Override
+    protected View getAggregationAnchorView(long rawContactId) {
+        BaseRawContactEditorView editorView = getRawContactEditorView(rawContactId);
+        return editorView == null ? null : editorView.findViewById(R.id.anchor_view);
+    }
+
     public BaseRawContactEditorView getRawContactEditorView(long rawContactId) {
         for (int i = 0; i < mContent.getChildCount(); i++) {
             final View childView = mContent.getChildAt(i);
diff --git a/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java b/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
index dca6e18..4d35332 100644
--- a/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
+++ b/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
@@ -47,8 +47,8 @@
                         new DialogInterface.OnClickListener() {
                             @Override
                             public void onClick(DialogInterface dialog, int whichButton) {
-                                ContactEditorFragment targetFragment =
-                                        (ContactEditorFragment) getTargetFragment();
+                                ContactEditorBaseFragment targetFragment =
+                                        (ContactEditorBaseFragment) getTargetFragment();
                                 long rawContactIds[] =
                                         getArguments().getLongArray(ARG_RAW_CONTACT_IDS);
                                 targetFragment.doJoinSuggestedContact(rawContactIds);
diff --git a/src/com/android/contacts/editor/LabeledEditorView.java b/src/com/android/contacts/editor/LabeledEditorView.java
index 397c335..5996fa6 100644
--- a/src/com/android/contacts/editor/LabeledEditorView.java
+++ b/src/com/android/contacts/editor/LabeledEditorView.java
@@ -120,6 +120,10 @@
         init(context);
     }
 
+    public Long getRawContactId() {
+        return mState == null ? null : mState.getRawContactId();
+    }
+
     private void init(Context context) {
         mMinLineItemHeight = context.getResources().getDimensionPixelSize(
                 R.dimen.editor_min_line_item_height);
diff --git a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
index 0af2d2d..c13d5ea 100644
--- a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
@@ -49,8 +49,8 @@
                         new DialogInterface.OnClickListener() {
                             @Override
                             public void onClick(DialogInterface dialog, int whichButton) {
-                                final ContactEditorFragment targetFragment =
-                                        (ContactEditorFragment) getTargetFragment();
+                                final ContactEditorBaseFragment targetFragment =
+                                        (ContactEditorBaseFragment) getTargetFragment();
                                 final Uri contactUri =
                                         getArguments().getParcelable(ARG_CONTACT_URI);
                                 targetFragment.doEditSuggestedContact(contactUri);
