diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 33c3f38..4235fe0 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -16,7 +16,6 @@
 
 package com.android.contacts.activities;
 
-import android.app.Activity;
 import android.app.Fragment;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
@@ -46,7 +45,6 @@
 import com.android.contacts.R;
 import com.android.contacts.common.activity.RequestPermissionsActivity;
 import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.editor.EditorIntents;
 import com.android.contacts.list.ContactPickerFragment;
 import com.android.contacts.list.ContactsIntentResolver;
@@ -62,7 +60,6 @@
 import com.android.contacts.list.OnPostalAddressPickerActionListener;
 import com.android.contacts.common.list.PhoneNumberPickerFragment;
 import com.android.contacts.list.PostalAddressPickerFragment;
-import com.google.common.collect.Sets;
 
 import java.util.Set;
 
@@ -75,8 +72,6 @@
                 OnCloseListener, OnFocusChangeListener {
     private static final String TAG = "ContactSelectionActivity";
 
-    private static final int SUBACTIVITY_ADD_TO_EXISTING_CONTACT = 0;
-
     private static final String KEY_ACTION_CODE = "actionCode";
     private static final String KEY_SEARCH_MODE = "searchMode";
     private static final int DEFAULT_DIRECTORY_RESULT_LIMIT = 20;
@@ -406,29 +401,8 @@
 
         @Override
         public void onEditContactAction(Uri contactLookupUri) {
-            Bundle extras = getIntent().getExtras();
-            if (launchAddToContactDialog(extras)) {
-                // Show a confirmation dialog to add the value(s) to the existing contact.
-                Intent intent = new Intent(ContactSelectionActivity.this,
-                        ConfirmAddDetailActivity.class);
-                intent.setData(contactLookupUri);
-                if (extras != null) {
-                    // First remove name key if present because the dialog does not support name
-                    // editing. This is fine because the user wants to add information to an
-                    // existing contact, who should already have a name and we wouldn't want to
-                    // override the name.
-                    extras.remove(Insert.NAME);
-                    intent.putExtras(extras);
-                }
-
-                // Wait for the activity result because we want to keep the picker open (in case the
-                // user cancels adding the info to a contact and wants to pick someone else).
-                startActivityForResult(intent, SUBACTIVITY_ADD_TO_EXISTING_CONTACT);
-            } else {
-                // Otherwise launch the full contact editor.
-                startActivityAndForwardResult(EditorIntents.createEditContactIntent(
-                        contactLookupUri, /* materialPalette =*/ null, /* photoId =*/ -1));
-            }
+            startActivityAndForwardResult(EditorIntents.createEditContactIntent(
+                    contactLookupUri, /* materialPalette =*/ null, /* photoId =*/ -1));
         }
 
         @Override
@@ -440,44 +414,6 @@
         public void onShortcutIntentCreated(Intent intent) {
             returnPickerResult(intent);
         }
-
-        /**
-         * Returns true if is a single email or single phone number provided in the {@link Intent}
-         * extras bundle so that a pop-up confirmation dialog can be used to add the data to
-         * a contact. Otherwise return false if there are other intent extras that require launching
-         * the full contact editor. Ignore extras with the key {@link Insert.NAME} because names
-         * are a special case and we typically don't want to replace the name of an existing
-         * contact.
-         */
-        private boolean launchAddToContactDialog(Bundle extras) {
-            if (extras == null) {
-                return false;
-            }
-
-            // Copy extras because the set may be modified in the next step
-            Set<String> intentExtraKeys = Sets.newHashSet();
-            intentExtraKeys.addAll(extras.keySet());
-
-            // Ignore name key because this is an existing contact.
-            if (intentExtraKeys.contains(Insert.NAME)) {
-                intentExtraKeys.remove(Insert.NAME);
-            }
-
-            int numIntentExtraKeys = intentExtraKeys.size();
-            if (numIntentExtraKeys == 2) {
-                boolean hasPhone = intentExtraKeys.contains(Insert.PHONE) &&
-                        intentExtraKeys.contains(Insert.PHONE_TYPE);
-                boolean hasEmail = intentExtraKeys.contains(Insert.EMAIL) &&
-                        intentExtraKeys.contains(Insert.EMAIL_TYPE);
-                return hasPhone || hasEmail;
-            } else if (numIntentExtraKeys == 1) {
-                return intentExtraKeys.contains(Insert.PHONE) ||
-                        intentExtraKeys.contains(Insert.EMAIL);
-            }
-            // Having 0 or more than 2 intent extra keys means that we should launch
-            // the full contact editor to properly handle the intent extras.
-            return false;
-        }
     }
 
     private final class PhoneNumberPickerActionListener implements
@@ -642,19 +578,6 @@
     }
 
     @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-        if (requestCode == SUBACTIVITY_ADD_TO_EXISTING_CONTACT) {
-            if (resultCode == Activity.RESULT_OK) {
-                if (data != null) {
-                    ImplicitIntentsUtil.startActivityInAppIfPossible(this, data);
-                }
-                finish();
-            }
-        }
-    }
-
-    @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         super.onCreateOptionsMenu(menu);
 
diff --git a/src/com/android/contacts/editor/TextFieldsEditorView.java b/src/com/android/contacts/editor/TextFieldsEditorView.java
index 0ec71fb..91b52d8 100644
--- a/src/com/android/contacts/editor/TextFieldsEditorView.java
+++ b/src/com/android/contacts/editor/TextFieldsEditorView.java
@@ -231,7 +231,8 @@
             int inputType = field.inputType;
             fieldView.setInputType(inputType);
             if (inputType == InputType.TYPE_CLASS_PHONE) {
-                PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(getContext(), fieldView);
+                PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(
+                        getContext(), fieldView, /* formatAfterWatcherSet =*/ true);
                 fieldView.setTextDirection(View.TEXT_DIRECTION_LTR);
             }
             fieldView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
