diff --git a/src/com/android/contacts/ContactEntryAdapter.java b/src/com/android/contacts/ContactEntryAdapter.java
index ae373cf..3b28b19 100644
--- a/src/com/android/contacts/ContactEntryAdapter.java
+++ b/src/com/android/contacts/ContactEntryAdapter.java
@@ -38,7 +38,7 @@
         Aggregates.PHOTO_ID, //2
         Data._ID, //3
         Data.CONTACT_ID, //4
-        Contacts.PACKAGE, //5
+        Data.RES_PACKAGE, //5
         Data.MIMETYPE, //6
         Data.IS_PRIMARY, //7
         Data.IS_SUPER_PRIMARY, //8
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index ed1e39a..ad78f95 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -47,7 +47,7 @@
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.Postal;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.Intents.UI;
@@ -231,9 +231,9 @@
 
     static final String[] POSTALS_PROJECTION = new String[] {
         Data._ID, //0
-        CommonDataKinds.Postal.TYPE, //1
-        CommonDataKinds.Postal.LABEL, //2
-        CommonDataKinds.Postal.DATA, //3
+        CommonDataKinds.StructuredPostal.TYPE, //1
+        CommonDataKinds.StructuredPostal.LABEL, //2
+        CommonDataKinds.StructuredPostal.DATA, //3
         Aggregates.DISPLAY_NAME, // 4
     };
     static final int POSTAL_ID_COLUMN_INDEX = 0;
@@ -361,7 +361,7 @@
                 mMode = MODE_PICK_AGGREGATE;
             } else if (Phone.CONTENT_TYPE.equals(type)) {
                 mMode = MODE_PICK_PHONE;
-            } else if (Postal.CONTENT_TYPE.equals(type)) {
+            } else if (StructuredPostal.CONTENT_TYPE.equals(type)) {
                 mMode = MODE_PICK_POSTAL;
             }
         } else if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
@@ -373,7 +373,7 @@
                 mMode = MODE_PICK_OR_CREATE_AGGREGATE;
             } else if (Phone.CONTENT_ITEM_TYPE.equals(type)) {
                 mMode = MODE_PICK_PHONE;
-            } else if (Postal.CONTENT_ITEM_TYPE.equals(type)) {
+            } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(type)) {
                 mMode = MODE_PICK_POSTAL;
             }
         } else if (Intent.ACTION_INSERT_OR_EDIT.equals(action)) {
@@ -1098,7 +1098,7 @@
                 break;
 
             case MODE_PICK_POSTAL:
-                mQueryHandler.startQuery(QUERY_TOKEN, null, Postal.CONTENT_URI,
+                mQueryHandler.startQuery(QUERY_TOKEN, null, StructuredPostal.CONTENT_URI,
                         POSTALS_PROJECTION, null, null, getSortOrder(POSTALS_PROJECTION));
                 break;
 
@@ -1325,7 +1325,7 @@
             switch (mMode) {
                 case MODE_PICK_POSTAL:
                     mLocalizedLabels = EditContactActivity.getLabelsForMimetype(mContext,
-                            CommonDataKinds.Postal.CONTENT_ITEM_TYPE);
+                            CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
                     mDisplaySectionHeaders = false;
                     break;
                 case MODE_PICK_PHONE:
@@ -1560,7 +1560,7 @@
                     dataColumnIndex = POSTAL_ADDRESS_COLUMN_INDEX;
                     typeColumnIndex = POSTAL_TYPE_COLUMN_INDEX;
                     labelColumnIndex = POSTAL_LABEL_COLUMN_INDEX;
-                    defaultType = Postal.TYPE_HOME;
+                    defaultType = StructuredPostal.TYPE_HOME;
                     break;
                 }
                 default: {
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
index 1db4a1e..5b944cb 100644
--- a/src/com/android/contacts/ContactsUtils.java
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -36,7 +36,7 @@
 import android.provider.ContactsContract.CommonDataKinds.Organization;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.Postal;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.Im.ProviderNames;
 import android.database.Cursor;
 import android.text.TextUtils;
@@ -64,9 +64,9 @@
         } else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
             colType = cursor.getColumnIndex(Email.TYPE);
             colLabel = cursor.getColumnIndex(Email.LABEL);
-        } else if (Postal.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            colType = cursor.getColumnIndex(Postal.TYPE);
-            colLabel = cursor.getColumnIndex(Postal.LABEL);
+        } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            colType = cursor.getColumnIndex(StructuredPostal.TYPE);
+            colLabel = cursor.getColumnIndex(StructuredPostal.LABEL);
         } else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType)) {
             colType = cursor.getColumnIndex(Organization.TYPE);
             colLabel = cursor.getColumnIndex(Organization.LABEL);
@@ -95,9 +95,9 @@
             defaultType = Email.TYPE_HOME;
             customType = Email.TYPE_CUSTOM;
             arrayResId = com.android.internal.R.array.emailAddressTypes;
-        } else if (Postal.CONTENT_ITEM_TYPE.equals(mimetype)) {
-            defaultType = Postal.TYPE_HOME;
-            customType = Postal.TYPE_CUSTOM;
+        } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimetype)) {
+            defaultType = StructuredPostal.TYPE_HOME;
+            customType = StructuredPostal.TYPE_CUSTOM;
             arrayResId = com.android.internal.R.array.postalAddressTypes;
         } else if (Organization.CONTENT_ITEM_TYPE.equals(mimetype)) {
             defaultType = Organization.TYPE_WORK;
diff --git a/src/com/android/contacts/DisplayGroupsActivity.java b/src/com/android/contacts/DisplayGroupsActivity.java
index c468655..269ed0b 100644
--- a/src/com/android/contacts/DisplayGroupsActivity.java
+++ b/src/com/android/contacts/DisplayGroupsActivity.java
@@ -366,12 +366,12 @@
             mCursor.moveToPosition(-1);
             while (mCursor.moveToNext()) {
                 final int position = mCursor.getPosition();
-                final long packageId = mCursor.getLong(Projections.COL_PACKAGE_ID);
+                final long packageId = mCursor.getLong(Projections.COL_ID);
                 totalContacts += mCursor.getInt(Projections.COL_SUMMARY_COUNT);
                 if (group == null || packageId != group.packageId) {
                     group = new Group();
                     group.packageId = packageId;
-                    group.packageName = mCursor.getString(Projections.COL_PACKAGE);
+                    group.packageName = mCursor.getString(Projections.COL_RES_PACKAGE);
                     group.firstPos = position;
                     group.label = group.packageName;
 
@@ -517,9 +517,9 @@
 
             // Read title, but override with string resource when present
             CharSequence title = mCursor.getString(Projections.COL_TITLE);
-            if (!mCursor.isNull(Projections.COL_TITLE_RESOURCE)) {
-                final String packageName = mCursor.getString(Projections.COL_PACKAGE);
-                final int titleRes = mCursor.getInt(Projections.COL_TITLE_RESOURCE);
+            if (!mCursor.isNull(Projections.COL_RES_TITLE)) {
+                final String packageName = mCursor.getString(Projections.COL_RES_PACKAGE);
+                final int titleRes = mCursor.getInt(Projections.COL_RES_TITLE);
                 try {
                     title = mExternalRes.getText(packageName, titleRes);
                 } catch (NameNotFoundException e) {
@@ -610,25 +610,24 @@
 
         public static final String[] PROJ_SUMMARY = new String[] {
             Groups._ID,
-            Groups.PACKAGE_ID,
-            Groups.PACKAGE,
             Groups.TITLE,
-            Groups.TITLE_RESOURCE,
+            Groups.RES_PACKAGE,
+            Groups.TITLE_RES,
             Groups.GROUP_VISIBLE,
             Groups.SUMMARY_COUNT,
             Groups.SUMMARY_WITH_PHONES,
         };
 
-        public static final String SORT_ORDER = Groups.PACKAGE + " ASC";
+        public static final String SORT_ORDER = Groups.ACCOUNT_TYPE + " ASC, "
+                + Groups.ACCOUNT_NAME + " ASC";
 
         public static final int COL_ID = 0;
-        public static final int COL_PACKAGE_ID = 1;
-        public static final int COL_PACKAGE = 2;
-        public static final int COL_TITLE = 3;
-        public static final int COL_TITLE_RESOURCE = 4;
-        public static final int COL_GROUP_VISIBLE = 5;
-        public static final int COL_SUMMARY_COUNT = 6;
-        public static final int COL_SUMMARY_WITH_PHONES = 7;
+        public static final int COL_TITLE = 1;
+        public static final int COL_RES_PACKAGE = 2;
+        public static final int COL_RES_TITLE = 3;
+        public static final int COL_GROUP_VISIBLE = 4;
+        public static final int COL_SUMMARY_COUNT = 5;
+        public static final int COL_SUMMARY_WITH_PHONES = 6;
 
     }
 
diff --git a/src/com/android/contacts/EditContactActivity.java b/src/com/android/contacts/EditContactActivity.java
index 32b55ef..4a62dd5 100644
--- a/src/com/android/contacts/EditContactActivity.java
+++ b/src/com/android/contacts/EditContactActivity.java
@@ -61,8 +61,8 @@
 import android.provider.ContactsContract.CommonDataKinds.Organization;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.Postal;
 import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.Data;
 import android.telephony.PhoneNumberFormattingTextWatcher;
 import android.text.Editable;
@@ -142,7 +142,7 @@
     private static final int DEFAULT_EMAIL_TYPE = Email.TYPE_HOME;
 
     /** The default type for a postal address that is added via an intent */
-    private static final int DEFAULT_POSTAL_TYPE = Postal.TYPE_HOME;
+    private static final int DEFAULT_POSTAL_TYPE = StructuredPostal.TYPE_HOME;
 
     private int mState; // saved across instances
     private boolean mInsert; // saved across instances
@@ -861,7 +861,7 @@
             return resources.getStringArray(android.R.array.phoneTypes);
         } else if (mimetype.equals(Email.CONTENT_ITEM_TYPE)) {
             return resources.getStringArray(android.R.array.emailAddressTypes);
-        } else if (mimetype.equals(Postal.CONTENT_ITEM_TYPE)) {
+        } else if (mimetype.equals(StructuredPostal.CONTENT_ITEM_TYPE)) {
             return resources.getStringArray(android.R.array.postalAddressTypes);
         } else if (mimetype.equals(Im.CONTENT_ITEM_TYPE)) {
             return resources.getStringArray(android.R.array.imProtocols);
@@ -1277,7 +1277,7 @@
                 mNoteEntries.add(entry);
             } else if (mimetype.equals(CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                     || mimetype.equals(CommonDataKinds.Email.CONTENT_ITEM_TYPE)
-                    || mimetype.equals(CommonDataKinds.Postal.CONTENT_ITEM_TYPE)
+                    || mimetype.equals(CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
                     || mimetype.equals(CommonDataKinds.Im.CONTENT_ITEM_TYPE)) {
                 int type = aggCursor.getInt(DATA_1_COLUMN);
                 String data = aggCursor.getString(DATA_2_COLUMN);
@@ -1301,7 +1301,7 @@
                     if (isSuperPrimary) {
                         mPrimaryEmailAdded = true;
                     }
-                } else if (mimetype.equals(CommonDataKinds.Postal.CONTENT_ITEM_TYPE)) {
+                } else if (mimetype.equals(CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)) {
                     entry = EditEntry.newPostalEntry(this, label, type, data, uri, id);
                     entry.isPrimary = isSuperPrimary;
                     mPostalEntries.add(entry);
@@ -1930,7 +1930,7 @@
             v.setText(ContactsUtils.getDisplayLabel(context, mimetype, type, label));
             if (mimetype.equals(Im.CONTENT_ITEM_TYPE) && type >= 0) {
                 v.setText(getLabelsForMimetype(activity, mimetype)[type]);
-            } else if (mimetype.equals(Postal.CONTENT_ITEM_TYPE)) {
+            } else if (mimetype.equals(StructuredPostal.CONTENT_ITEM_TYPE)) {
                 v.setMaxLines(3);
             }
             v.setOnClickListener(activity);
@@ -1991,12 +1991,12 @@
                     values.put(CommonDataKinds.Im.PROTOCOL,
                             ContactsUtils.encodeCustomImProtocol(label.toString()));
                 }
-            } else if (mimetype.equals(CommonDataKinds.Postal.CONTENT_ITEM_TYPE)) {
-                if (type != Postal.TYPE_CUSTOM) {
+            } else if (mimetype.equals(CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)) {
+                if (type != StructuredPostal.TYPE_CUSTOM) {
                     labelString = null;
                 }
-                values.put(Postal.LABEL, labelString);
-                values.put(Postal.TYPE, type);
+                values.put(StructuredPostal.LABEL, labelString);
+                values.put(StructuredPostal.TYPE, type);
             } else if (mimetype.equals(CommonDataKinds.Organization.CONTENT_ITEM_TYPE)) {
                 if (type != Organization.TYPE_CUSTOM) {
                     labelString = null;
@@ -2181,8 +2181,8 @@
                 String label, int type, String data, Uri uri, long id) {
             EditEntry entry = new EditEntry(activity, label, type, data, uri, id);
             entry.hint = activity.getString(R.string.ghostData_postal);
-            entry.column = Postal.DATA;
-            entry.mimetype = Postal.CONTENT_ITEM_TYPE;
+            entry.column = StructuredPostal.DATA;
+            entry.mimetype = StructuredPostal.CONTENT_ITEM_TYPE;
             entry.contentType = EditorInfo.TYPE_CLASS_TEXT
                     | EditorInfo.TYPE_TEXT_VARIATION_POSTAL_ADDRESS
                     | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS
diff --git a/src/com/android/contacts/FastTrackWindow.java b/src/com/android/contacts/FastTrackWindow.java
index f61b73e..0413110 100644
--- a/src/com/android/contacts/FastTrackWindow.java
+++ b/src/com/android/contacts/FastTrackWindow.java
@@ -576,7 +576,7 @@
      */
     private void handleData(Cursor cursor) {
         final int colId = cursor.getColumnIndex(Data._ID);
-        final int colPackage = cursor.getColumnIndex(Contacts.PACKAGE);
+        final int colPackage = cursor.getColumnIndex(Data.RES_PACKAGE);
         final int colMimeType = cursor.getColumnIndex(Data.MIMETYPE);
         final int colPhoto = cursor.getColumnIndex(Photo.PHOTO);
 
diff --git a/src/com/android/contacts/SocialStreamActivity.java b/src/com/android/contacts/SocialStreamActivity.java
index 24587fa..679424d 100644
--- a/src/com/android/contacts/SocialStreamActivity.java
+++ b/src/com/android/contacts/SocialStreamActivity.java
@@ -76,7 +76,7 @@
 
     private static final String[] PROJ_ACTIVITIES = new String[] {
         Activities._ID,
-        Activities.PACKAGE,
+        Activities.RES_PACKAGE,
         Activities.MIMETYPE,
         Activities.AUTHOR_CONTACT_ID,
         Contacts.AGGREGATE_ID,
diff --git a/src/com/android/contacts/SplitAggregateView.java b/src/com/android/contacts/SplitAggregateView.java
index fde2b86..ef6b4f4 100644
--- a/src/com/android/contacts/SplitAggregateView.java
+++ b/src/com/android/contacts/SplitAggregateView.java
@@ -50,12 +50,12 @@
 public class SplitAggregateView extends ListView {
 
     private static final String[] AGGREGATE_DATA_PROJECTION = new String[] {
-            Data.MIMETYPE, Contacts.PACKAGE, Data.CONTACT_ID, Data.DATA1, Data.DATA2,
+            Data.MIMETYPE, Data.RES_PACKAGE, Data.CONTACT_ID, Data.DATA1, Data.DATA2,
             Data.IS_PRIMARY, StructuredName.DISPLAY_NAME
     };
 
     private static final int COL_MIMETYPE = 0;
-    private static final int COL_PACKAGE = 1;
+    private static final int COL_RES_PACKAGE = 1;
     private static final int COL_CONTACT_ID = 2;
     private static final int COL_DATA1 = 3;
     private static final int COL_DATA2 = 4;
@@ -104,7 +104,7 @@
      */
     private static class ContactInfo implements Comparable<ContactInfo> {
         final long contactId;
-        String packageName;
+        String resPackage;
         String name;
         String phone;
         String email;
@@ -131,7 +131,7 @@
         }
 
         public int compareTo(ContactInfo another) {
-            return packageName.compareTo(another.packageName);
+            return resPackage.compareTo(another.resPackage);
         }
     }
 
@@ -151,7 +151,7 @@
                 if (info == null) {
                     info = new ContactInfo(contactId);
                     contactInfos.put(contactId, info);
-                    info.packageName = cursor.getString(COL_PACKAGE);
+                    info.resPackage = cursor.getString(COL_RES_PACKAGE);
                 }
 
                 String mimetype = cursor.getString(COL_MIMETYPE);
@@ -253,7 +253,7 @@
             cache.name.setText(info.name);
             cache.additionalData.setText(info.getAdditionalData());
 
-            Bitmap sourceBitmap = getSourceIcon(info.packageName);
+            Bitmap sourceBitmap = getSourceIcon(info.resPackage);
             if (sourceBitmap != null) {
                 cache.sourceIcon.setImageBitmap(sourceBitmap);
             } else {
diff --git a/src/com/android/contacts/TypePrecedence.java b/src/com/android/contacts/TypePrecedence.java
index 4518102..d348fef 100644
--- a/src/com/android/contacts/TypePrecedence.java
+++ b/src/com/android/contacts/TypePrecedence.java
@@ -20,7 +20,7 @@
 import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.provider.ContactsContract.CommonDataKinds.Organization;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Postal;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 
 /**
  * This class contains utility functions for determining the precedence of different types
@@ -49,10 +49,10 @@
             Email.TYPE_OTHER};
 
     private static final int[] TYPE_PRECEDENCE_POSTAL = {
-            Postal.TYPE_CUSTOM,
-            Postal.TYPE_HOME,
-            Postal.TYPE_WORK,
-            Postal.TYPE_OTHER};
+            StructuredPostal.TYPE_CUSTOM,
+            StructuredPostal.TYPE_HOME,
+            StructuredPostal.TYPE_WORK,
+            StructuredPostal.TYPE_OTHER};
 
     private static final int[] TYPE_PRECEDENCE_IM = {
             Im.TYPE_CUSTOM,
@@ -93,7 +93,7 @@
             return TYPE_PRECEDENCE_PHONES;
         } else if (mimetype.equals(Email.CONTENT_ITEM_TYPE)) {
             return TYPE_PRECEDENCE_EMAIL;
-        } else if (mimetype.equals(Postal.CONTENT_ITEM_TYPE)) {
+        } else if (mimetype.equals(StructuredPostal.CONTENT_ITEM_TYPE)) {
             return TYPE_PRECEDENCE_POSTAL;
         } else if (mimetype.equals(Im.CONTENT_ITEM_TYPE)) {
             return TYPE_PRECEDENCE_IM;
diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index 46cd26b..35710b5 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -390,7 +390,7 @@
             if (entry.primaryIcon == -1) {
                 menu.add(0, MENU_ITEM_MAKE_DEFAULT, 0, R.string.menu_makeDefaultEmail);
             }
-        } else if (entry.mimetype.equals(CommonDataKinds.Postal.CONTENT_ITEM_TYPE)) {
+        } else if (entry.mimetype.equals(CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)) {
             menu.add(0, 0, 0, R.string.menu_viewAddress).setIntent(entry.intent);
         }
         // TODO(emillar): add back with group support.
@@ -722,7 +722,7 @@
 
                 if (mimetype.equals(CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                         || mimetype.equals(CommonDataKinds.Email.CONTENT_ITEM_TYPE)
-                        || mimetype.equals(CommonDataKinds.Postal.CONTENT_ITEM_TYPE)
+                        || mimetype.equals(CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
                         || mimetype.equals(CommonDataKinds.Im.CONTENT_ITEM_TYPE)) {
                     final int type = aggCursor.getInt(DATA_1_COLUMN);
                     final String label = aggCursor.getString(DATA_3_COLUMN);
@@ -783,7 +783,7 @@
                         }
                         mEmailEntries.add(entry);
                     // Build postal entries
-                    } else if (mimetype.equals(CommonDataKinds.Postal.CONTENT_ITEM_TYPE)) {
+                    } else if (mimetype.equals(CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)) {
                         entry.label = buildActionString(R.string.actionMap,
                                 ContactsUtils.getDisplayLabel(this, mimetype, type, label), true);
                         entry.data = data;
