diff --git a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
index f32ee5b..74991b0 100644
--- a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
@@ -118,6 +118,12 @@
         final FragmentManager fm = getFragmentManager();
         final PickRawContactDialogFragment oldFragment = (PickRawContactDialogFragment)
                 fm.findFragmentByTag(TAG_RAW_CONTACTS_DIALOG);
+        if (oldFragment != null && oldFragment.getDialog() != null
+                && oldFragment.getDialog().isShowing()) {
+            // Just update the cursor without reshowing the dialog.
+            oldFragment.setCursor(mCursor);
+            return;
+        }
         final FragmentTransaction ft = fm.beginTransaction();
         if (oldFragment != null) {
             ft.remove(oldFragment);
diff --git a/src/com/android/contacts/editor/PickRawContactDialogFragment.java b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
index 20e8f35..484747d 100644
--- a/src/com/android/contacts/editor/PickRawContactDialogFragment.java
+++ b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
@@ -105,6 +105,7 @@
     private Cursor mCursor;
     // Uri for the whole Contact.
     private Uri mUri;
+    private CursorAdapter mAdapter;
     private MaterialPalette mMaterialPalette;
 
     public static PickRawContactDialogFragment getInstance(Uri uri, Cursor cursor,
@@ -119,12 +120,12 @@
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        final CursorAdapter adapter = new RawContactAccountListAdapter(getContext(), mCursor);
+        mAdapter = new RawContactAccountListAdapter(getContext(), mCursor);
         builder.setTitle(R.string.contact_editor_pick_raw_contact_dialog_title);
-        builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
+        builder.setAdapter(mAdapter, new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialog, int which) {
-                final long rawContactId = adapter.getItemId(which);
+                final long rawContactId = mAdapter.getItemId(which);
                 final Intent intent = EditorIntents.createEditContactIntentForRawContact(
                         getActivity(), mUri, rawContactId, mMaterialPalette);
                 intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
@@ -146,7 +147,10 @@
         mUri = uri;
     }
 
-    private void setCursor(Cursor cursor) {
+    public void setCursor(Cursor cursor) {
+        if (mAdapter != null) {
+            mAdapter.swapCursor(cursor);
+        }
         mCursor = cursor;
     }
 
