diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index c94907e..f030311 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -67,10 +67,10 @@
 
     private static final String KEY_MODE = "mode";
 
-    private static final int SUBACTIVITY_NEW_CONTACT = 1;
-    private static final int SUBACTIVITY_VIEW_CONTACT = 2;
-    private static final int SUBACTIVITY_DISPLAY_GROUP = 3;
-    private static final int SUBACTIVITY_SEARCH = 4;
+    private static final int SUBACTIVITY_NEW_CONTACT = 2;
+    private static final int SUBACTIVITY_VIEW_CONTACT = 3;
+    private static final int SUBACTIVITY_DISPLAY_GROUP = 4;
+    private static final int SUBACTIVITY_SEARCH = 5;
 
     private DialogManager mDialogManager = new DialogManager(this);
 
@@ -503,20 +503,14 @@
 
     private class EditorFragmentListener implements ContactEditorFragment.Listener {
         @Override
-        public void closeAfterDelete() {
-            Toast.makeText(ContactBrowserActivity.this, "closeAfterDelete",
-                    Toast.LENGTH_LONG).show();
-        }
-
-        @Override
-        public void closeAfterRevert() {
+        public void onReverted() {
             final Uri uri = mEditorFragment.getUri();
             closeEditorFragment(false);
             setupContactDetailFragment(uri);
         }
 
         @Override
-        public void closeAfterSaving(int resultCode, Intent resultIntent) {
+        public void onSaveFinished(int resultCode, Intent resultIntent) {
             // it is already saved, so no need to save again here
             final Uri uri = mEditorFragment.getUri();
             closeEditorFragment(false);
@@ -524,19 +518,19 @@
         }
 
         @Override
-        public void closeAfterSplit() {
+        public void onSplit() {
             Toast.makeText(ContactBrowserActivity.this, "closeAfterSplit",
                     Toast.LENGTH_LONG).show();
         }
 
         @Override
-        public void closeBecauseAccountSelectorAborted() {
+        public void onAccountSelectorAborted() {
             Toast.makeText(ContactBrowserActivity.this, "closeBecauseAccountSelectorAborted",
                     Toast.LENGTH_LONG).show();
         }
 
         @Override
-        public void closeBecauseContactNotFound() {
+        public void onContactNotFound() {
             Toast.makeText(ContactBrowserActivity.this, "closeBecauseContactNotFound",
                     Toast.LENGTH_LONG).show();
         }
@@ -602,7 +596,7 @@
             }
             case R.id.menu_add: {
                 final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
-                startActivity(intent);
+                startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT);
                 return true;
             }
             case R.id.menu_import_export: {
@@ -683,13 +677,14 @@
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch (requestCode) {
-//            case SUBACTIVITY_NEW_CONTACT:
-//                if (resultCode == RESULT_OK) {
-//                    returnPickerResult(null, data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME),
-//                            data.getData());
-//                    setRe
-//                }
-//                break;
+            case SUBACTIVITY_NEW_CONTACT: {
+                if (resultCode == RESULT_OK && mContactContentDisplayed) {
+                    final Uri newContactUri = data.getData();
+                    mListFragment.setSelectedContactUri(newContactUri);
+                    setupContactDetailFragment(newContactUri);
+                }
+                break;
+            }
 
 //            case SUBACTIVITY_VIEW_CONTACT:
 //                if (resultCode == RESULT_OK) {
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 59a4e83..71ed3c5 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -97,39 +97,35 @@
     private final ContactEditorFragment.Listener mFragmentListener =
             new ContactEditorFragment.Listener() {
         @Override
-        public void closeAfterDelete() {
-            Toast.makeText(ContactEditorActivity.this, "closeAfterDelete",
-                    Toast.LENGTH_LONG).show();
-        }
-
-        @Override
-        public void closeAfterRevert() {
+        public void onReverted() {
             finish();
         }
 
         @Override
-        public void closeAfterSaving(int resultCode, Intent resultIntent) {
+        public void onSaveFinished(int resultCode, Intent resultIntent) {
+            setResult(resultCode, resultIntent);
             finish();
         }
 
         @Override
-        public void closeAfterSplit() {
+        public void onSplit() {
             finish();
         }
 
         @Override
-        public void closeBecauseAccountSelectorAborted() {
+        public void onAccountSelectorAborted() {
             finish();
         }
 
         @Override
-        public void closeBecauseContactNotFound() {
+        public void onContactNotFound() {
+            setResult(Activity.RESULT_CANCELED, null);
             finish();
         }
 
         @Override
         public void setTitleTo(int resourceId) {
-            Toast.makeText(ContactEditorActivity.this, "setTitleTo", Toast.LENGTH_LONG).show();
+            setTitle(resourceId);
         }
     };
 
diff --git a/src/com/android/contacts/views/editor/ContactEditorFragment.java b/src/com/android/contacts/views/editor/ContactEditorFragment.java
index f75cfd1..5951f7f 100644
--- a/src/com/android/contacts/views/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/views/editor/ContactEditorFragment.java
@@ -519,7 +519,7 @@
             public void onCancel(DialogInterface dialog) {
                 // If nothing remains, close activity
                 if (!hasValidState()) {
-                    mListener.closeBecauseAccountSelectorAborted();
+                    mListener.onAccountSelectorAborted();
                 }
             }
         };
@@ -733,7 +733,7 @@
     }
 
     private boolean doRevertAction() {
-        if (mListener != null) mListener.closeAfterRevert();
+        if (mListener != null) mListener.onReverted();
 
         return true;
     }
@@ -767,10 +767,10 @@
                     resultCode = Activity.RESULT_CANCELED;
                     resultIntent = null;
                 }
-                if (mListener != null) mListener.closeAfterSaving(resultCode, resultIntent);
+                if (mListener != null) mListener.onSaveFinished(resultCode, resultIntent);
                 break;
             case SAVE_MODE_SPLIT:
-                if (mListener != null) mListener.closeAfterSplit();
+                if (mListener != null) mListener.onSplit();
                 break;
 
             case SAVE_MODE_JOIN:
@@ -898,29 +898,25 @@
 
     public static interface Listener {
         /**
-         * Contact was not found, so somehow close this fragment.
+         * Contact was not found, so somehow close this fragment. This is raised after a contact
+         * is removed via Menu/Delete (unless it was a new contact)
          */
-        void closeBecauseContactNotFound();
+        void onContactNotFound();
 
         /**
          * Contact was split, so we can close now
          */
-        void closeAfterSplit();
+        void onSplit();
 
         /**
          * User was presented with an account selection and couldn't decide.
          */
-        void closeBecauseAccountSelectorAborted();
+        void onAccountSelectorAborted();
 
         /**
          * User has tapped Revert, close the fragment now.
          */
-        void closeAfterRevert();
-
-        /**
-         * User has removed the contact, close the fragment now.
-         */
-        void closeAfterDelete();
+        void onReverted();
 
         /**
          * Set the Title (e.g. of the Activity)
@@ -928,11 +924,9 @@
         void setTitleTo(int resourceId);
 
         /**
-         * Contact was
-         * @param resultCode
-         * @param resultIntent
+         * Contact was saved and the Fragment can now be closed safely.
          */
-        void closeAfterSaving(int resultCode, Intent resultIntent);
+        void onSaveFinished(int resultCode, Intent resultIntent);
     }
 
     private class EntityDeltaComparator implements Comparator<EntityDelta> {
@@ -1117,7 +1111,7 @@
             }
             // Save the deletes
             doSaveAction(SAVE_MODE_DEFAULT);
-            mListener.closeAfterDelete();
+            mListener.onContactNotFound();
         }
     }
 
@@ -1330,7 +1324,7 @@
             if (data == ContactLoader.Result.NOT_FOUND) {
                 // Item has been deleted
                 Log.i(TAG, "No contact found. Closing activity");
-                if (mListener != null) mListener.closeBecauseContactNotFound();
+                if (mListener != null) mListener.onContactNotFound();
                 return;
             }
 
