diff --git a/src/com/android/contacts/ui/EditContactActivity.java b/src/com/android/contacts/ui/EditContactActivity.java
index 843615a..6059e62 100644
--- a/src/com/android/contacts/ui/EditContactActivity.java
+++ b/src/com/android/contacts/ui/EditContactActivity.java
@@ -736,12 +736,17 @@
 
             final ArrayList<Account> writable = sources.getAccounts(true);
 
+            // No Accounts available.  Create a phone-local contact.
+            if (writable.isEmpty()) {
+                selectAccount(null);
+                return null;  // Don't show a dialog.
+            }
+
             // In the common case of a single account being writable, auto-select
             // it without showing a dialog.
             if (writable.size() == 1) {
                 selectAccount(writable.get(0));
-                // Signal to not show a dialog:
-                return null;
+                return null;  // Don't show a dialog.
             }
 
             final ArrayAdapter<Account> accountAdapter = new ArrayAdapter<Account>(target,
@@ -802,6 +807,13 @@
             return builder;
         }
 
+        /**
+         * Sets up EditContactActivity's mState for the account selected.
+         * Runs from a background thread.
+         *
+         * @param account may be null to signal a device-local contact should
+         *     be created.
+         */
         private void selectAccount(Account account) {
             EditContactActivity target = mTarget.get();
             if (target == null) {
@@ -809,13 +821,19 @@
             }
             final Sources sources = Sources.getInstance(target);
             final ContentValues values = new ContentValues();
-            values.put(RawContacts.ACCOUNT_NAME, account.name);
-            values.put(RawContacts.ACCOUNT_TYPE, account.type);
+            if (account != null) {
+                values.put(RawContacts.ACCOUNT_NAME, account.name);
+                values.put(RawContacts.ACCOUNT_TYPE, account.type);
+            } else {
+                values.putNull(RawContacts.ACCOUNT_NAME);
+                values.putNull(RawContacts.ACCOUNT_TYPE);
+            }
 
             // Parse any values from incoming intent
             final EntityDelta insert = new EntityDelta(ValuesDelta.fromAfter(values));
-            final ContactsSource source = sources.getInflatedSource(account.type,
-                                                                    ContactsSource.LEVEL_CONSTRAINTS);
+            final ContactsSource source = sources.getInflatedSource(
+                account != null ? account.type : null,
+                ContactsSource.LEVEL_CONSTRAINTS);
             final Bundle extras = target.getIntent().getExtras();
             EntityModifier.parseExtras(target, source, insert, extras);
 
