diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 1845a52..3052a24 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -164,7 +164,7 @@
         void load(String action, Uri lookupUri, Bundle intentExtras);
 
         /**
-         * Applies extras from the hosting Activity to the first writable raw contact.
+         * Applies extras from the hosting Activity to the writable raw contact.
          */
         void setIntentExtras(Bundle extras);
 
diff --git a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
index 5b71c48..69dccb5 100644
--- a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
@@ -30,7 +30,8 @@
  * This activity has noHistory set to true, and all intents coming out from it have
  * {@code FLAG_ACTIVITY_FORWARD_RESULT} set.
  */
-public class ContactEditorSpringBoardActivity extends AppCompatContactsActivity  {
+public class ContactEditorSpringBoardActivity extends AppCompatContactsActivity implements
+        PickRawContactDialogFragment.PickRawContactListener {
     private static final String TAG = "EditorSpringBoard";
     private static final String TAG_RAW_CONTACTS_DIALOG = "rawContactsDialog";
     private static final int LOADER_RAW_CONTACTS = 1;
@@ -109,13 +110,17 @@
         if (ContactsContract.AUTHORITY.equals(authority) &&
                 RawContacts.CONTENT_ITEM_TYPE.equals(type)) {
             final long rawContactId = ContentUris.parseId(mUri);
-            final Intent editorIntent = getIntentForRawContact(rawContactId);
-            ImplicitIntentsUtil.startActivityInApp(this, editorIntent);
+            startEditorAndForwardExtras(getIntentForRawContact(rawContactId));
         } else {
             getLoaderManager().initLoader(LOADER_RAW_CONTACTS, null, mRawContactLoaderListener);
         }
     }
 
+    @Override
+    public void onPickRawContact(long rawContactId) {
+        startEditorAndForwardExtras(getIntentForRawContact(rawContactId));
+    }
+
     /**
      * Start the dialog to pick the raw contact to edit.
      */
@@ -134,7 +139,7 @@
             ft.remove(oldFragment);
         }
         final PickRawContactDialogFragment newFragment = PickRawContactDialogFragment.getInstance(
-                mUri, mCursor, mMaterialPalette, mIsUserProfile);
+                 mCursor, mIsUserProfile);
         ft.add(newFragment, TAG_RAW_CONTACTS_DIALOG);
         // commitAllowingStateLoss is safe in this activity because the fragment entirely depends
         // on the result of the loader. Even if we lose the fragment because the activity was
@@ -163,7 +168,7 @@
         // Destroy the loader to prevent multiple onLoadFinished calls in case CP2 is updating in
         // the background.
         getLoaderManager().destroyLoader(LOADER_RAW_CONTACTS);
-        ImplicitIntentsUtil.startActivityInApp(this, intent);
+        startEditorAndForwardExtras(intent);
     }
 
     /**
@@ -195,4 +200,15 @@
         intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
         return intent;
     }
+
+    /**
+     * Starts the given intent within the app, attaching any extras to it that were passed to us.
+     */
+    private void startEditorAndForwardExtras(Intent intent) {
+        final Bundle extras = getIntent().getExtras();
+        if (extras != null) {
+            intent.putExtras(extras);
+        }
+        ImplicitIntentsUtil.startActivityInApp(this, intent);
+    }
 }
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 9f55551..0f1ff8e 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -1366,19 +1366,7 @@
 
     @Override
     public void setIntentExtras(Bundle extras) {
-        if (extras == null || extras.size() == 0) {
-            return;
-        }
-
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
-        for (RawContactDelta state : mState) {
-            final AccountType type = state.getAccountType(accountTypes);
-            if (type.areContactsWritable()) {
-                // Apply extras to the first writable raw contact only
-                RawContactModifier.parseExtras(mContext, type, state, extras);
-                break;
-            }
-        }
+        getContent().setIntentExtras(extras);
     }
 
     @Override
diff --git a/src/com/android/contacts/editor/PickRawContactDialogFragment.java b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
index 623d038..dd079a2 100644
--- a/src/com/android/contacts/editor/PickRawContactDialogFragment.java
+++ b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
@@ -6,7 +6,6 @@
 import android.content.ContentUris;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.Intent;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
@@ -28,18 +27,19 @@
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.model.account.GoogleAccountType;
 import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
 
 /**
+ * Should only be started from an activity that implements {@link PickRawContactListener}.
  * Dialog containing the raw contacts that make up a contact. On selection the editor is loaded
  * for the chosen raw contact.
  */
 public class PickRawContactDialogFragment extends DialogFragment {
-    private static final String ARGS_URI = "uri";
-    private static final String ARGS_MATERIAL_PALETTE = "materialPalette";
     private static final String ARGS_IS_USER_PROFILE = "isUserProfile";
 
+    public interface PickRawContactListener {
+        void onPickRawContact(long rawContactId);
+    }
+
     /**
      * Used to list the account info for the given raw contacts list.
      */
@@ -142,18 +142,12 @@
 
     // Cursor holding all raw contact rows for the given Contact.
     private Cursor mCursor;
-    // Uri for the whole Contact.
-    private Uri mUri;
     private CursorAdapter mAdapter;
-    private MaterialPalette mMaterialPalette;
     private boolean mIsUserProfile;
 
-    public static PickRawContactDialogFragment getInstance(Uri uri, Cursor cursor,
-            MaterialPalette materialPalette, boolean isUserProfile) {
+    public static PickRawContactDialogFragment getInstance(Cursor cursor, boolean isUserProfile) {
         final PickRawContactDialogFragment fragment = new PickRawContactDialogFragment();
         final Bundle args = new Bundle();
-        args.putParcelable(ARGS_URI, uri);
-        args.putParcelable(ARGS_MATERIAL_PALETTE, materialPalette);
         args.putBoolean(ARGS_IS_USER_PROFILE, isUserProfile);
         fragment.setArguments(args);
         fragment.setCursor(cursor);
@@ -162,6 +156,10 @@
 
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
+        if (!(getActivity() instanceof PickRawContactListener)) {
+            throw new IllegalArgumentException(
+                    "Host activity doesn't implement PickRawContactListener");
+        }
         final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
         mAdapter = new RawContactAccountListAdapter(getContext(), mCursor);
         builder.setTitle(R.string.contact_editor_pick_raw_contact_dialog_title);
@@ -169,10 +167,7 @@
             @Override
             public void onClick(DialogInterface dialog, int which) {
                 final long rawContactId = mAdapter.getItemId(which);
-                final Intent intent = EditorIntents.createEditContactIntentForRawContact(
-                        getActivity(), mUri, rawContactId, mMaterialPalette);
-                intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
-                ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
+                ((PickRawContactListener) getActivity()).onPickRawContact(rawContactId);
             }
         });
         builder.setCancelable(true);
@@ -192,8 +187,6 @@
 
         final Bundle args = getArguments();
         if (args != null) {
-            mUri = args.getParcelable(ARGS_URI);
-            mMaterialPalette = args.getParcelable(ARGS_MATERIAL_PALETTE);
             mIsUserProfile = args.getBoolean(ARGS_IS_USER_PROFILE);
         }
     }
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
index 1b37dab..fe7894a 100644
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ b/src/com/android/contacts/editor/RawContactEditorView.java
@@ -21,6 +21,7 @@
 import android.database.Cursor;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.provider.ContactsContract.CommonDataKinds.Email;
@@ -223,6 +224,8 @@
 
     private boolean mIsExpanded;
 
+    private Bundle mIntentExtras;
+
     private ValuesDelta mPhotoValuesDelta;
 
     public RawContactEditorView(Context context) {
@@ -425,6 +428,10 @@
         }
     }
 
+    public void setIntentExtras(Bundle extras) {
+        mIntentExtras = extras;
+    }
+
     public void setState(RawContactDeltaList rawContactDeltas,
             MaterialColorMapUtils.MaterialPalette materialPalette, ViewIdGenerator viewIdGenerator,
             boolean hasNewContact, boolean isUserProfile, AccountWithDataSet primaryAccount,
@@ -455,6 +462,8 @@
             return;
         }
         pickRawContactDelta();
+        // Apply any intent extras now that we have selected a raw contact delta.
+        applyIntentExtras();
         parseRawContactDelta();
         if (mKindSectionDataMap.isEmpty()) {
             elog("No kind section data parsed from RawContactDelta(s)");
@@ -531,6 +540,17 @@
 
     }
 
+    private void applyIntentExtras() {
+        if (mIntentExtras == null || mIntentExtras.size() == 0) {
+            return;
+        }
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(getContext());
+        final AccountType type = mCurrentRawContactDelta.getAccountType(accountTypes);
+
+        RawContactModifier.parseExtras(getContext(), type, mCurrentRawContactDelta, mIntentExtras);
+        mIntentExtras = null;
+    }
+
     private void parseRawContactDelta() {
         mKindSectionDataMap.clear();
         mSortedMimetypes.clear();
