diff --git a/src/com/android/contacts/activities/AttachPhotoActivity.java b/src/com/android/contacts/activities/AttachPhotoActivity.java
index ad64d8d..bc1de8a 100644
--- a/src/com/android/contacts/activities/AttachPhotoActivity.java
+++ b/src/com/android/contacts/activities/AttachPhotoActivity.java
@@ -143,7 +143,8 @@
             }
             // If there's an account specified, use it.
             if (result != null) {
-                AccountWithDataSet account = result.getParcelableExtra(Intents.Insert.ACCOUNT);
+                AccountWithDataSet account = result.getParcelableExtra(
+                        Intents.Insert.EXTRA_ACCOUNT);
                 if (account != null) {
                     createNewRawContact(account);
                     return;
diff --git a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
index bf3b1c1..a922ca1 100644
--- a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
@@ -185,7 +185,7 @@
 
         // Pass account info in activity result intent
         Intent intent = new Intent();
-        intent.putExtra(Intents.Insert.ACCOUNT, account);
+        intent.putExtra(Intents.Insert.EXTRA_ACCOUNT, account);
         setResult(RESULT_OK, intent);
         finish();
     }
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index e98ba7d..23df47e 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -434,9 +434,9 @@
             } else if (Intent.ACTION_INSERT.equals(mAction)) {
                 mHasNewContact = true;
                 final Account account = mIntentExtras == null ? null :
-                        (Account) mIntentExtras.getParcelable(Intents.Insert.ACCOUNT);
+                        (Account) mIntentExtras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
                 final String dataSet = mIntentExtras == null ? null :
-                        mIntentExtras.getString(Intents.Insert.DATA_SET);
+                        mIntentExtras.getString(Intents.Insert.EXTRA_DATA_SET);
 
                 if (account != null) {
                     // Account specified in Intent
@@ -1863,7 +1863,8 @@
                 }
                 // If there's an account specified, use it.
                 if (data != null) {
-                    AccountWithDataSet account = data.getParcelableExtra(Intents.Insert.ACCOUNT);
+                    AccountWithDataSet account = data.getParcelableExtra(
+                            Intents.Insert.EXTRA_ACCOUNT);
                     if (account != null) {
                         createContact(account);
                         return;
diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java
index 3d13bdd..eda5d4f 100644
--- a/src/com/android/contacts/group/GroupEditorFragment.java
+++ b/src/com/android/contacts/group/GroupEditorFragment.java
@@ -239,9 +239,9 @@
             startGroupMetaDataLoader();
         } else if (Intent.ACTION_INSERT.equals(mAction)) {
             final Account account = mIntentExtras == null ? null :
-                    (Account) mIntentExtras.getParcelable(Intents.Insert.ACCOUNT);
+                    (Account) mIntentExtras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
             final String dataSet = mIntentExtras == null ? null :
-                    mIntentExtras.getString(Intents.Insert.DATA_SET);
+                    mIntentExtras.getString(Intents.Insert.EXTRA_DATA_SET);
 
             if (account != null) {
                 // Account specified in Intent - no data set can be specified in this manner.
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 73a3db9..37161d1 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -2341,10 +2341,10 @@
                     // account.
                     if (mContactData.getDirectoryExportSupport() ==
                             Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY) {
-                        intent.putExtra(Intents.Insert.ACCOUNT,
+                        intent.putExtra(Intents.Insert.EXTRA_ACCOUNT,
                                 new Account(mContactData.getDirectoryAccountName(),
                                         mContactData.getDirectoryAccountType()));
-                        intent.putExtra(Intents.Insert.DATA_SET,
+                        intent.putExtra(Intents.Insert.EXTRA_DATA_SET,
                                 mContactData.getRawContacts().get(0).getDataSet());
                     }
 
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 59afa60..fcd3e8b 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -600,16 +600,16 @@
         switch (ContactsIntent.get(tag)) {
             case EDIT_NEW_CONTACT_FOR_ACCOUNT: {
                 final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
-                intent.putExtra(Insert.ACCOUNT, account);
-                intent.putExtra(Insert.DATA_SET, dataSet);
+                intent.putExtra(Insert.EXTRA_ACCOUNT, account);
+                intent.putExtra(Insert.EXTRA_DATA_SET, dataSet);
                 startActivity(intent);
                 break;
             }
             case EDIT_NEW_CONTACT_FOR_ACCOUNT_WITH_DATA: {
                 final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
 
-                intent.putExtra(Insert.ACCOUNT, account);
-                intent.putExtra(Insert.DATA_SET, dataSet);
+                intent.putExtra(Insert.EXTRA_ACCOUNT, account);
+                intent.putExtra(Insert.EXTRA_DATA_SET, dataSet);
                 putDataExtra(intent);
 
                 startActivity(intent);
