diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index ada4778..012a33e 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -79,7 +79,7 @@
     
     static final String[] PHONES_PROJECTION = new String[] {
         Phones.PERSON_ID,
-        Phones.NAME,
+        Phones.DISPLAY_NAME,
         Phones.TYPE,
         Phones.LABEL,
         Phones.NUMBER,
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 6fad5a9..6e72fbd 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -57,8 +57,10 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ContextMenu.ContextMenuInfo;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.AdapterView;
 import android.widget.AlphabetIndexer;
+import android.widget.Filter;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.ResourceCursorAdapter;
@@ -87,6 +89,7 @@
     static final int MENU_ITEM_DELETE = 7;
     static final int MENU_ITEM_TOGGLE_STAR = 8;
 
+    public static final int MENU_SEARCH = 1;
     public static final int MENU_DIALER = 9;
     public static final int MENU_NEW_CONTACT = 10;
     public static final int MENU_DISPLAY_GROUP = 11;
@@ -587,13 +590,22 @@
             }
         }
 
-        if (runQuery) {
-            // Calling requery here may cause an ANR, so always do the async query
+        if (mJustCreated && runQuery) {
+            // We need to start a query here the first time the activity is launched, as long
+            // as we aren't doing a filter.
             startQuery();
         }
         mJustCreated = false;
     }
     
+    @Override
+    protected void onRestart() {
+        super.onRestart();
+
+        // The cursor was killed off in onStop(), so we need to get a new one here
+        startQuery();
+    }
+    
     private void updateGroup() {
         if (mDefaultMode) {
             setDefaultMode();
@@ -625,7 +637,7 @@
 
         // We don't want the list to display the empty state, since when we resume it will still
         // be there and show up while the new query is happening. After the async query finished
-        // in response to onResume() setLoading(false) will be called.
+        // in response to onRestart() setLoading(false) will be called.
         mAdapter.setLoading(true);
         mAdapter.changeCursor(null);
 
@@ -644,6 +656,10 @@
             return false;
         }
 
+        // Search
+        menu.add(0, MENU_SEARCH, 0, R.string.menu_search)
+                .setIcon(android.R.drawable.ic_menu_search);
+
         // New contact
         menu.add(0, MENU_NEW_CONTACT, 0, R.string.menu_newContact)
                 .setIcon(android.R.drawable.ic_menu_add)
@@ -720,16 +736,21 @@
     
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        if (item.getItemId() == MENU_DISPLAY_GROUP) {
-            AlertDialog.Builder builder = new AlertDialog.Builder(this)
-                .setTitle(R.string.select_group_title)
-                .setPositiveButton(android.R.string.ok, this)
-                .setNegativeButton(android.R.string.cancel, null);
-            
-            setGroupEntries(builder);
-            
-            builder.show();
-            return true;
+        switch (item.getItemId()) {
+            case MENU_DISPLAY_GROUP:
+                AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                    .setTitle(R.string.select_group_title)
+                    .setPositiveButton(android.R.string.ok, this)
+                    .setNegativeButton(android.R.string.cancel, null);
+                
+                setGroupEntries(builder);
+                
+                builder.show();
+                return true;
+
+            case MENU_SEARCH:
+                startSearch(null, false, null, false);
+                return true;
         }
         return false;
     }
@@ -888,6 +909,11 @@
 
     @Override
     protected void onListItemClick(ListView l, View v, int position, long id) {
+        // Hide soft keyboard, if visible
+        InputMethodManager inputMethodManager = (InputMethodManager)
+                getSystemService(Context.INPUT_METHOD_SERVICE);
+        inputMethodManager.hideSoftInputFromWindow(mList.getWindowToken(), 0);
+
         if (mMode == MODE_INSERT_OR_EDIT_CONTACT) {
             Intent intent;
             if (position == 0) {
@@ -1018,7 +1044,7 @@
 
             case MODE_WITH_PHONES:
                 mQueryHandler.startQuery(QUERY_TOKEN, null, People.CONTENT_URI, CONTACTS_PROJECTION,
-                        People.PRIMARY_PHONE_ID + " IS NOT NULL", null, People.DEFAULT_SORT_ORDER);
+                        People.PRIMARY_PHONE_ID + " IS NOT NULL", null, SORT_ORDER);
                 break;
 
             case MODE_QUERY: {
@@ -1075,8 +1101,7 @@
                 } else {
                     uri = Uri.withAppendedPath(mGroupFilterUri, Uri.encode(filter));
                 }
-                return resolver.query(uri, CONTACTS_PROJECTION, null, null,
-                        People.DEFAULT_SORT_ORDER);
+                return resolver.query(uri, CONTACTS_PROJECTION, null, null, SORT_ORDER);
             }
 
             case MODE_ALL_CONTACTS:
@@ -1294,7 +1319,7 @@
         private CharSequence[] mLocalizedLabels;
 
         public ContactItemListAdapter(Context context) {
-            super(context, R.layout.contacts_list_item, null);
+            super(context, R.layout.contacts_list_item, null, false);
             
             mAlphabet = context.getString(com.android.internal.R.string.fast_scroll_alphabet);
             
@@ -1311,6 +1336,24 @@
             }
         }
 
+        /**
+         * Callback on the UI thread when the content observer on the backing cursor fires.
+         * Instead of calling requery we need to do an async query so that the requery doesn't
+         * block the UI thread for a long time. 
+         */
+        @Override
+        protected void onContentChanged() {
+            CharSequence constraint = getListView().getTextFilter();
+            if (!TextUtils.isEmpty(constraint)) {
+                // Reset the filter state then start an async filter operation
+                Filter filter = getFilter();
+                filter.filter(constraint);
+            } else {
+                // Start an async query
+                startQuery();
+            }
+        }
+        
         public void setLoading(boolean loading) {
             mLoading = loading;
         }
diff --git a/src/com/android/contacts/EditContactActivity.java b/src/com/android/contacts/EditContactActivity.java
index c12074e..49569e3 100644
--- a/src/com/android/contacts/EditContactActivity.java
+++ b/src/com/android/contacts/EditContactActivity.java
@@ -69,6 +69,7 @@
 import android.provider.Contacts;
 import android.provider.Contacts.ContactMethods;
 import android.provider.Contacts.Intents.Insert;
+import android.provider.Contacts.Groups;
 import android.provider.Contacts.Organizations;
 import android.provider.Contacts.People;
 import android.provider.Contacts.Phones;
@@ -932,6 +933,44 @@
             if (!TextUtils.isEmpty(displayGroup)) {
                 People.addToGroup(mResolver, ContentUris.parseId(contactUri), displayGroup);
             }
+        } else {
+            // Check to see if we're not syncing everything and if so if My Contacts is synced.
+            // If it isn't then the created contact can end up not in any groups that are
+            // currently synced and end up getting removed from the phone, which is really bad.
+            boolean syncingEverything = !"0".equals(Contacts.Settings.getSetting(mResolver, null,
+                    Contacts.Settings.SYNC_EVERYTHING));
+            if (!syncingEverything) {
+                boolean syncingMyContacts = false;
+                Cursor c = mResolver.query(Groups.CONTENT_URI, new String[] { Groups.SHOULD_SYNC },
+                        Groups.SYSTEM_ID + "=?", new String[] { Groups.GROUP_MY_CONTACTS }, null);
+                if (c != null) {
+                    try {
+                        if (c.moveToFirst()) {
+                            syncingMyContacts = !"0".equals(c.getString(0));
+                        }
+                    } finally {
+                        c.close();
+                    }
+                }
+
+                if (!syncingMyContacts) {
+                    // Not syncing My Contacts, so find a group that is being synced and stick
+                    // the contact in there. We sort the list so at least all contacts
+                    // will appear in the same group.
+                    c = mResolver.query(Groups.CONTENT_URI, new String[] { Groups._ID },
+                            Groups.SHOULD_SYNC + "!=0", null, Groups.DEFAULT_SORT_ORDER);
+                    if (c != null) {
+                        try {
+                            if (c.moveToFirst()) {
+                                People.addToGroup(mResolver, ContentUris.parseId(contactUri),
+                                        c.getLong(0));
+                            }
+                        } finally {
+                            c.close();
+                        }
+                    }
+                }
+            }
         }
 
         // Handle the photo
diff --git a/src/com/android/contacts/RecentCallsListActivity.java b/src/com/android/contacts/RecentCallsListActivity.java
index 8d6360b..dbf2879 100644
--- a/src/com/android/contacts/RecentCallsListActivity.java
+++ b/src/com/android/contacts/RecentCallsListActivity.java
@@ -95,7 +95,7 @@
     /** The projection to use when querying the phones table */
     static final String[] PHONES_PROJECTION = new String[] {
             Phones.PERSON_ID,
-            Phones.NAME,
+            Phones.DISPLAY_NAME,
             Phones.TYPE,
             Phones.LABEL,
             Phones.NUMBER
