diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index eb5aec5..2aeb34d 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -59,6 +59,7 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract.RawContactsEntity;
 import android.provider.ContactsContract.StatusUpdates;
 import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.provider.ContactsContract.CommonDataKinds.Im;
@@ -297,31 +298,27 @@
         return null;
     }
 
-    // QUERY CODE //
     /** {@inheritDoc} */
-    public void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator) {
-        try {
-            // Read incoming entities and consider binding
-            readEntities(iterator);
-            considerBindData();
-        } finally {
-            if (iterator != null) {
+    public void onQueryComplete(int token, Object cookie, Cursor cursor) {
+        if (token == TOKEN_STATUSES) {
+            try {
+                // Read available social rows and consider binding
+                readStatuses(cursor);
+            } finally {
+                if (cursor != null) {
+                    cursor.close();
+                }
+            }
+        } else {
+            EntityIterator iterator = RawContacts.newEntityIterator(cursor);
+            try {
+                // Read incoming entities and consider binding
+                readEntities(iterator);
+            } finally {
                 iterator.close();
             }
         }
-    }
-
-    /** {@inheritDoc} */
-    public void onQueryComplete(int token, Object cookie, Cursor cursor) {
-        try {
-            // Read available social rows and consider binding
-            readStatuses(cursor);
-            considerBindData();
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
+        considerBindData();
     }
 
     private long getRefreshedContactId() {
@@ -399,7 +396,7 @@
         mHasEntities = false;
         mHasStatuses = false;
 
-        mHandler.startQueryEntities(TOKEN_ENTITIES, null, RawContacts.CONTENT_URI,
+        mHandler.startQuery(TOKEN_ENTITIES, null, RawContactsEntity.CONTENT_URI, null,
                 RawContacts.CONTACT_ID + "=" + contactId, null, null);
         mHandler.startQuery(TOKEN_STATUSES, null, dataUri, StatusQuery.PROJECTION,
                         StatusUpdates.PRESENCE + " IS NOT NULL OR " + StatusUpdates.STATUS
diff --git a/src/com/android/contacts/model/EntitySet.java b/src/com/android/contacts/model/EntitySet.java
index be2f70f..ac53611 100644
--- a/src/com/android/contacts/model/EntitySet.java
+++ b/src/com/android/contacts/model/EntitySet.java
@@ -21,15 +21,13 @@
 import android.content.Entity;
 import android.content.EntityIterator;
 import android.content.ContentProviderOperation.Builder;
-import android.graphics.BitmapFactory;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.provider.ContactsContract.AggregationExceptions;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.RawContactsEntity;
 
 import com.google.android.collect.Lists;
 
@@ -65,26 +63,24 @@
      */
     public static EntitySet fromQuery(ContentResolver resolver, String selection,
             String[] selectionArgs, String sortOrder) {
-        EntityIterator iterator = null;
-        final EntitySet state = new EntitySet();
+        EntityIterator iterator = RawContacts.newEntityIterator(resolver.query(
+                RawContactsEntity.CONTENT_URI, null, selection, selectionArgs,
+                sortOrder));
         try {
+            final EntitySet state = new EntitySet();
             // Perform background query to pull contact details
-            iterator = resolver.queryEntities(RawContacts.CONTENT_URI, selection, selectionArgs,
-                    sortOrder);
             while (iterator.hasNext()) {
                 // Read all contacts into local deltas to prepare for edits
                 final Entity before = iterator.next();
                 final EntityDelta entity = EntityDelta.fromBefore(before);
                 state.add(entity);
             }
+            return state;
         } catch (RemoteException e) {
             throw new IllegalStateException("Problem querying contact details", e);
         } finally {
-            if (iterator != null) {
-                iterator.close();
-            }
+            iterator.close();
         }
-        return state;
     }
 
     /**
diff --git a/src/com/android/contacts/ui/DisplayGroupsActivity.java b/src/com/android/contacts/ui/DisplayGroupsActivity.java
index 9ac46ce..16af321 100644
--- a/src/com/android/contacts/ui/DisplayGroupsActivity.java
+++ b/src/com/android/contacts/ui/DisplayGroupsActivity.java
@@ -379,30 +379,29 @@
             mName = accountName;
             mType = accountType;
 
-            boolean hasGroups = false;
-
             final Uri groupsUri = Groups.CONTENT_URI.buildUpon()
                     .appendQueryParameter(Groups.ACCOUNT_NAME, accountName)
                     .appendQueryParameter(Groups.ACCOUNT_TYPE, accountType).build();
-            EntityIterator iterator = null;
+            EntityIterator iterator = ContactsContract.Groups.newEntityIterator(resolver.query(
+                    groupsUri, null, null, null, null));
             try {
+                boolean hasGroups = false;
+
                 // Create entries for each known group
-                iterator = resolver.queryEntities(groupsUri, null, null, null);
                 while (iterator.hasNext()) {
                     final ContentValues values = iterator.next().getEntityValues();
                     final GroupDelta group = GroupDelta.fromBefore(values);
                     addGroup(group);
                     hasGroups = true;
                 }
+                // Create single entry handling ungrouped status
+                mUngrouped = GroupDelta.fromSettings(resolver, accountName, accountType, hasGroups);
+                addGroup(mUngrouped);
             } catch (RemoteException e) {
                 Log.w(TAG, "Problem reading groups: " + e.toString());
             } finally {
-                if (iterator != null) iterator.close();
+                iterator.close();
             }
-
-            // Create single entry handling ungrouped status
-            mUngrouped = GroupDelta.fromSettings(resolver, accountName, accountType, hasGroups);
-            addGroup(mUngrouped);
         }
 
         /**
diff --git a/src/com/android/contacts/ui/QuickContactWindow.java b/src/com/android/contacts/ui/QuickContactWindow.java
index e1ff0e3..8aab8a8 100644
--- a/src/com/android/contacts/ui/QuickContactWindow.java
+++ b/src/com/android/contacts/ui/QuickContactWindow.java
@@ -1554,11 +1554,6 @@
     }
 
     /** {@inheritDoc} */
-    public void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator) {
-        // No actions
-    }
-
-    /** {@inheritDoc} */
     public void onAttachedToWindow() {
         // No actions
     }
diff --git a/src/com/android/contacts/ui/ShowOrCreateActivity.java b/src/com/android/contacts/ui/ShowOrCreateActivity.java
index 7728b36..0828b3f 100755
--- a/src/com/android/contacts/ui/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/ui/ShowOrCreateActivity.java
@@ -221,11 +221,6 @@
 	return super.onCreateDialog(id);
     }
 
-    /** {@inheritDoc} */
-    public void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator) {
-        // No actions
-    }
-
     /**
      * Listener for {@link DialogInterface} that launches a given {@link Intent}
      * when clicked. When clicked, this also closes the parent using
diff --git a/src/com/android/contacts/util/NotifyingAsyncQueryHandler.java b/src/com/android/contacts/util/NotifyingAsyncQueryHandler.java
index 795ac79..83fae29 100644
--- a/src/com/android/contacts/util/NotifyingAsyncQueryHandler.java
+++ b/src/com/android/contacts/util/NotifyingAsyncQueryHandler.java
@@ -18,7 +18,6 @@
 
 import android.content.AsyncQueryHandler;
 import android.content.Context;
-import android.content.EntityIterator;
 import android.database.Cursor;
 
 import java.lang.ref.WeakReference;
@@ -26,7 +25,7 @@
 /**
  * Slightly more abstract {@link AsyncQueryHandler} that helps keep a
  * {@link WeakReference} back to a listener. Will properly close any
- * {@link Cursor} or {@link EntityIterator} if the listener ceases to exist.
+ * {@link Cursor} if the listener ceases to exist.
  * <p>
  * This pattern can be used to perform background queries without leaking
  * {@link Context} objects.
@@ -41,7 +40,6 @@
      */
     public interface AsyncQueryListener {
         void onQueryComplete(int token, Object cookie, Cursor cursor);
-        void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator);
     }
 
     public NotifyingAsyncQueryHandler(Context context, AsyncQueryListener listener) {
@@ -67,15 +65,4 @@
             cursor.close();
         }
     }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void onQueryEntitiesComplete(int token, Object cookie, EntityIterator iterator) {
-        final AsyncQueryListener listener = mListener.get();
-        if (listener != null) {
-            listener.onQueryEntitiesComplete(token, cookie, iterator);
-        } else if (iterator != null) {
-            iterator.close();
-        }
-    }
 }
