diff --git a/src/com/android/contacts/model/EntityModifier.java b/src/com/android/contacts/model/EntityModifier.java
index 37267ec..7a19bf8 100644
--- a/src/com/android/contacts/model/EntityModifier.java
+++ b/src/com/android/contacts/model/EntityModifier.java
@@ -443,7 +443,7 @@
 
             final String name = extras.getString(Insert.NAME);
             if (ContactsUtils.isGraphic(name)) {
-                child.put(StructuredName.GIVEN_NAME, name);
+                child.put(StructuredName.DISPLAY_NAME, name);
             }
 
             final String phoneticName = extras.getString(Insert.PHONETIC_NAME);
@@ -456,7 +456,7 @@
             // StructuredPostal
             final DataKind kind = source.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
             parseExtras(state, kind, extras, Insert.POSTAL_TYPE, Insert.POSTAL,
-                    StructuredPostal.STREET);
+                    StructuredPostal.FORMATTED_ADDRESS);
         }
 
         {
diff --git a/src/com/android/contacts/views/editor/ContactEditorFragment.java b/src/com/android/contacts/views/editor/ContactEditorFragment.java
index a744d0f..d0f78a5 100644
--- a/src/com/android/contacts/views/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/views/editor/ContactEditorFragment.java
@@ -271,7 +271,7 @@
             } else if (Intent.ACTION_INSERT.equals(mAction)) {
                 if (mListener != null) mListener.setTitleTo(R.string.editContact_title_insert);
 
-                doAddAction();
+                doAddAction(true);
             } else throw new IllegalArgumentException("Unknown Action String " + mAction +
                     ". Only support " + Intent.ACTION_EDIT + " or " + Intent.ACTION_INSERT);
         }
@@ -354,7 +354,7 @@
         bindEditors();
     }
 
-    public void selectAccountAndCreateContact(boolean isNewContact) {
+    private void selectAccountAndCreateContact(boolean isNewContact) {
         final ArrayList<Account> accounts = Sources.getInstance(mContext).getAccounts(true);
         // No Accounts available.  Create a phone-local contact.
         if (accounts.isEmpty()) {
@@ -369,7 +369,8 @@
             return;  // Don't show a dialog.
         }
 
-        final SelectAccountDialogFragment dialog = new SelectAccountDialogFragment(getId());
+        final SelectAccountDialogFragment dialog = new SelectAccountDialogFragment(getId(),
+                isNewContact);
         dialog.show(getActivity(), SelectAccountDialogFragment.TAG);
     }
 
@@ -500,7 +501,7 @@
             case R.id.menu_discard:
                 return doRevertAction();
             case R.id.menu_add_raw_contact:
-                return doAddAction();
+                return doAddAction(false);
             case R.id.menu_delete:
                 return doDeleteAction();
             case R.id.menu_split:
@@ -511,9 +512,9 @@
         return false;
     }
 
-    private boolean doAddAction() {
+    private boolean doAddAction(boolean isNewContact) {
         // Load Accounts async so that we can present them
-        selectAccountAndCreateContact(true);
+        selectAccountAndCreateContact(isNewContact);
 
         return true;
     }
@@ -1599,8 +1600,8 @@
      * Account was chosen in the selector. Create a RawContact for this account now
      */
     @Override
-    public void onAccountChosen(Account account) {
-        createContact(account, false);
+    public void onAccountChosen(Account account, boolean isNewContact) {
+        createContact(account, isNewContact);
     }
 
     /**
diff --git a/src/com/android/contacts/views/editor/SelectAccountDialogFragment.java b/src/com/android/contacts/views/editor/SelectAccountDialogFragment.java
index 66370cf..9ea1955 100644
--- a/src/com/android/contacts/views/editor/SelectAccountDialogFragment.java
+++ b/src/com/android/contacts/views/editor/SelectAccountDialogFragment.java
@@ -44,12 +44,30 @@
  */
 public class SelectAccountDialogFragment extends TargetedDialogFragment {
     public static final String TAG = "PickPhotoDialogFragment";
+    private static final String IS_NEW_CONTACT = "IS_NEW_CONTACT";
+
+    private boolean mIsNewContact;
 
     public SelectAccountDialogFragment() {
     }
 
-    public SelectAccountDialogFragment(int targetFragmentId) {
+    public SelectAccountDialogFragment(int targetFragmentId, boolean isNewContact) {
         super(targetFragmentId);
+        mIsNewContact = isNewContact;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        if (savedInstanceState != null) {
+            mIsNewContact = savedInstanceState.getBoolean(IS_NEW_CONTACT);
+        }
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putBoolean(IS_NEW_CONTACT, mIsNewContact);
     }
 
     public Dialog onCreateDialog(Bundle savedInstanceState) {
@@ -92,7 +110,7 @@
             public void onClick(DialogInterface dialog, int which) {
                 dialog.dismiss();
 
-                targetListener.onAccountChosen(accountAdapter.getItem(which));
+                targetListener.onAccountChosen(accountAdapter.getItem(which), mIsNewContact);
             }
         };
 
@@ -111,7 +129,7 @@
     }
 
     public interface Listener {
-        void onAccountChosen(Account account);
+        void onAccountChosen(Account account, boolean isNewContact);
         void onAccountSelectorCancelled();
     }
 }
