diff --git a/src/com/android/providers/contacts/ContactAggregator.java b/src/com/android/providers/contacts/ContactAggregator.java
index 1a0a0a0..a5a2aa9 100644
--- a/src/com/android/providers/contacts/ContactAggregator.java
+++ b/src/com/android/providers/contacts/ContactAggregator.java
@@ -569,39 +569,27 @@
                 return;
             }
 
-            addMatchCandidatesFamilyNameOnly(familyName, candidates);
+            addMatchCandidatesSingleName(familyName, candidates);
         } else if (TextUtils.isEmpty(familyName)) {
-            addMatchCandidatesGivenNameOnly(givenName, candidates);
+            addMatchCandidatesSingleName(givenName, candidates);
         } else {
             addMatchCandidatesFullName(givenName, familyName, mode, candidates);
         }
     }
 
-    private void addMatchCandidatesGivenNameOnly(String givenName,
-            MatchCandidateList candidates) {
-        String givenNameN = NameNormalizer.normalize(givenName);
-        candidates.add(givenNameN, NameLookupType.GIVEN_NAME_ONLY);
-
-        String[] clusters = mOpenHelper.getCommonNicknameClusters(givenNameN);
-        if (clusters != null) {
-            for (int i = 0; i < clusters.length; i++) {
-                candidates.add(clusters[i], NameLookupType.GIVEN_NAME_ONLY_AS_NICKNAME);
-            }
-        }
-    }
-
-    private void addMatchCandidatesFamilyNameOnly(String familyName,
-            MatchCandidateList candidates) {
-        String familyNameN = NameNormalizer.normalize(familyName);
-        candidates.add(familyNameN, NameLookupType.FAMILY_NAME_ONLY);
+    private void addMatchCandidatesSingleName(String name, MatchCandidateList candidates) {
+        String nameN = NameNormalizer.normalize(name);
+        candidates.add(nameN, NameLookupType.NAME_EXACT);
 
         // Take care of first and last names swapped
-        String[] clusters = mOpenHelper.getCommonNicknameClusters(familyNameN);
+        String[] clusters = mOpenHelper.getCommonNicknameClusters(nameN);
         if (clusters != null) {
             for (int i = 0; i < clusters.length; i++) {
-                candidates.add(clusters[i], NameLookupType.FAMILY_NAME_ONLY_AS_NICKNAME);
+                candidates.add(clusters[i], NameLookupType.NAME_VARIANT);
             }
         }
+
+        candidates.add(nameN, NameLookupType.NAME_COLLATION_KEY);
     }
 
     private void addMatchCandidatesFullName(String givenName, String familyName, int mode,
@@ -610,40 +598,22 @@
         final String[] givenNameNicknames = mOpenHelper.getCommonNicknameClusters(givenNameN);
         final String familyNameN = NameNormalizer.normalize(familyName);
         final String[] familyNameNicknames = mOpenHelper.getCommonNicknameClusters(familyNameN);
-        candidates.add(givenNameN + "." + familyNameN, NameLookupType.FULL_NAME);
+        candidates.add(givenNameN + "." + familyNameN, NameLookupType.NAME_EXACT);
         if (givenNameNicknames != null) {
             for (int i = 0; i < givenNameNicknames.length; i++) {
                 candidates.add(givenNameNicknames[i] + "." + familyNameN,
-                        NameLookupType.FULL_NAME_WITH_NICKNAME);
+                        NameLookupType.NAME_VARIANT);
             }
         }
-        candidates.add(familyNameN + "." + givenNameN, NameLookupType.FULL_NAME_REVERSE);
+        candidates.add(familyNameN + "." + givenNameN, NameLookupType.NAME_VARIANT);
         if (familyNameNicknames != null) {
             for (int i = 0; i < familyNameNicknames.length; i++) {
                 candidates.add(familyNameNicknames[i] + "." + givenNameN,
-                        NameLookupType.FULL_NAME_WITH_NICKNAME_REVERSE);
+                        NameLookupType.NAME_VARIANT);
             }
         }
-        candidates.add(givenNameN + familyNameN, NameLookupType.FULL_NAME_CONCATENATED);
-        candidates.add(familyNameN + givenNameN, NameLookupType.FULL_NAME_REVERSE_CONCATENATED);
-
-        if (mode == MODE_AGGREGATION || mode == MODE_SUGGESTIONS) {
-            candidates.add(givenNameN, NameLookupType.GIVEN_NAME_ONLY);
-            if (givenNameNicknames != null) {
-                for (int i = 0; i < givenNameNicknames.length; i++) {
-                    candidates.add(givenNameNicknames[i],
-                            NameLookupType.GIVEN_NAME_ONLY_AS_NICKNAME);
-                }
-            }
-
-            candidates.add(familyNameN, NameLookupType.FAMILY_NAME_ONLY);
-            if (familyNameNicknames != null) {
-                for (int i = 0; i < familyNameNicknames.length; i++) {
-                    candidates.add(familyNameNicknames[i],
-                            NameLookupType.FAMILY_NAME_ONLY_AS_NICKNAME);
-                }
-            }
-        }
+        candidates.add(givenNameN + familyNameN, NameLookupType.NAME_COLLATION_KEY);
+        candidates.add(familyNameN + givenNameN, NameLookupType.NAME_COLLATION_KEY);
     }
 
     /**
diff --git a/src/com/android/providers/contacts/ContactMatcher.java b/src/com/android/providers/contacts/ContactMatcher.java
index 6ab98dd..15c5c43 100644
--- a/src/com/android/providers/contacts/ContactMatcher.java
+++ b/src/com/android/providers/contacts/ContactMatcher.java
@@ -91,90 +91,29 @@
      * scores than direct matches.
      */
     static {
-        setScoreRange(NameLookupType.FULL_NAME,
-                NameLookupType.FULL_NAME, 99, 99);
-        setScoreRange(NameLookupType.FULL_NAME,
-                NameLookupType.FULL_NAME_REVERSE, 90, 90);
+        setScoreRange(NameLookupType.NAME_EXACT,
+                NameLookupType.NAME_EXACT, 99, 99);
+        setScoreRange(NameLookupType.NAME_VARIANT,
+                NameLookupType.NAME_VARIANT, 90, 90);
+        setScoreRange(NameLookupType.NAME_COLLATION_KEY,
+                NameLookupType.NAME_COLLATION_KEY, 40, 80);
 
-        setScoreRange(NameLookupType.FULL_NAME_REVERSE,
-                NameLookupType.FULL_NAME, 90, 90);
-        setScoreRange(NameLookupType.FULL_NAME_REVERSE,
-                NameLookupType.FULL_NAME_REVERSE, 99, 99);
-
-        setScoreRange(NameLookupType.FULL_NAME_CONCATENATED,
-                NameLookupType.FULL_NAME_CONCATENATED, 40, 80);
-        setScoreRange(NameLookupType.FULL_NAME_CONCATENATED,
-                NameLookupType.FULL_NAME_REVERSE_CONCATENATED, 30, 70);
-        setScoreRange(NameLookupType.FULL_NAME_CONCATENATED,
+        setScoreRange(NameLookupType.NAME_COLLATION_KEY,
                 NameLookupType.EMAIL_BASED_NICKNAME, 30, 60);
-        setScoreRange(NameLookupType.FULL_NAME_CONCATENATED,
+        setScoreRange(NameLookupType.NAME_COLLATION_KEY,
                 NameLookupType.NICKNAME, 30, 60);
 
-        setScoreRange(NameLookupType.FULL_NAME_REVERSE_CONCATENATED,
-                NameLookupType.FULL_NAME_CONCATENATED, 30, 70);
-        setScoreRange(NameLookupType.FULL_NAME_REVERSE_CONCATENATED,
-                NameLookupType.FULL_NAME_REVERSE_CONCATENATED, 40, 80);
-
-        setScoreRange(NameLookupType.FULL_NAME_WITH_NICKNAME,
-                NameLookupType.FULL_NAME_WITH_NICKNAME, 75, 75);
-        setScoreRange(NameLookupType.FULL_NAME_WITH_NICKNAME_REVERSE,
-                NameLookupType.FULL_NAME_WITH_NICKNAME_REVERSE, 73, 73);
-
-        setScoreRange(NameLookupType.FAMILY_NAME_ONLY,
-                NameLookupType.FAMILY_NAME_ONLY, 45, 75);
-        setScoreRange(NameLookupType.FAMILY_NAME_ONLY,
-                NameLookupType.FULL_NAME_CONCATENATED, 32, 72);
-        setScoreRange(NameLookupType.FAMILY_NAME_ONLY,
-                NameLookupType.FULL_NAME_REVERSE_CONCATENATED, 30, 70);
-        setScoreRange(NameLookupType.FAMILY_NAME_ONLY,
-                NameLookupType.EMAIL_BASED_NICKNAME, 30, 60);
-        setScoreRange(NameLookupType.FAMILY_NAME_ONLY,
-                NameLookupType.NICKNAME, 30, 60);
-
-        setScoreRange(NameLookupType.FAMILY_NAME_ONLY_AS_NICKNAME,
-                NameLookupType.FAMILY_NAME_ONLY_AS_NICKNAME, 71, 71);
-        setScoreRange(NameLookupType.FAMILY_NAME_ONLY_AS_NICKNAME,
-                NameLookupType.GIVEN_NAME_ONLY_AS_NICKNAME, 70, 70);
-
-        setScoreRange(NameLookupType.GIVEN_NAME_ONLY,
-                NameLookupType.GIVEN_NAME_ONLY, 40, 70);
-        setScoreRange(NameLookupType.GIVEN_NAME_ONLY,
-                NameLookupType.FULL_NAME_CONCATENATED, 32, 72);
-        setScoreRange(NameLookupType.GIVEN_NAME_ONLY,
-                NameLookupType.FULL_NAME_REVERSE_CONCATENATED, 30, 70);
-        setScoreRange(NameLookupType.GIVEN_NAME_ONLY,
-                NameLookupType.EMAIL_BASED_NICKNAME, 30, 60);
-        setScoreRange(NameLookupType.GIVEN_NAME_ONLY,
-                NameLookupType.NICKNAME, 30, 60);
-
-        setScoreRange(NameLookupType.GIVEN_NAME_ONLY_AS_NICKNAME,
-                NameLookupType.GIVEN_NAME_ONLY_AS_NICKNAME, 73, 73);
-        setScoreRange(NameLookupType.GIVEN_NAME_ONLY_AS_NICKNAME,
-                NameLookupType.FAMILY_NAME_ONLY_AS_NICKNAME, 70, 70);
-
         setScoreRange(NameLookupType.EMAIL_BASED_NICKNAME,
                 NameLookupType.EMAIL_BASED_NICKNAME, 30, 60);
         setScoreRange(NameLookupType.EMAIL_BASED_NICKNAME,
-                NameLookupType.GIVEN_NAME_ONLY, 30, 60);
-        setScoreRange(NameLookupType.EMAIL_BASED_NICKNAME,
-                NameLookupType.FAMILY_NAME_ONLY, 30, 60);
-        setScoreRange(NameLookupType.EMAIL_BASED_NICKNAME,
-                NameLookupType.FULL_NAME_CONCATENATED, 30, 60);
-        setScoreRange(NameLookupType.EMAIL_BASED_NICKNAME,
-                NameLookupType.FULL_NAME_REVERSE_CONCATENATED, 30, 60);
+                NameLookupType.NAME_COLLATION_KEY, 30, 60);
         setScoreRange(NameLookupType.EMAIL_BASED_NICKNAME,
                 NameLookupType.NICKNAME, 30, 60);
 
         setScoreRange(NameLookupType.NICKNAME,
                 NameLookupType.NICKNAME, 30, 60);
         setScoreRange(NameLookupType.NICKNAME,
-                NameLookupType.GIVEN_NAME_ONLY, 30, 60);
-        setScoreRange(NameLookupType.NICKNAME,
-                NameLookupType.FAMILY_NAME_ONLY, 30, 60);
-        setScoreRange(NameLookupType.NICKNAME,
-                NameLookupType.FULL_NAME_CONCATENATED, 30, 60);
-        setScoreRange(NameLookupType.NICKNAME,
-                NameLookupType.FULL_NAME_REVERSE_CONCATENATED, 30, 60);
+                NameLookupType.NAME_COLLATION_KEY, 30, 60);
         setScoreRange(NameLookupType.NICKNAME,
                 NameLookupType.EMAIL_BASED_NICKNAME, 30, 60);
     }
diff --git a/src/com/android/providers/contacts/OpenHelper.java b/src/com/android/providers/contacts/OpenHelper.java
index 05cf678..09935b1 100644
--- a/src/com/android/providers/contacts/OpenHelper.java
+++ b/src/com/android/providers/contacts/OpenHelper.java
@@ -59,7 +59,7 @@
 /* package */ class OpenHelper extends SQLiteOpenHelper {
     private static final String TAG = "OpenHelper";
 
-    private static final int DATABASE_VERSION = 65;
+    private static final int DATABASE_VERSION = 66;
     private static final String DATABASE_NAME = "contacts2.db";
     private static final String DATABASE_PRESENCE = "presence_db";
 
@@ -342,25 +342,19 @@
     }
 
     public final static class NameLookupType {
-        public static final int FULL_NAME = 0;
-        public static final int FULL_NAME_CONCATENATED = 1;
-        public static final int FULL_NAME_REVERSE = 2;
-        public static final int FULL_NAME_REVERSE_CONCATENATED = 3;
-        public static final int FULL_NAME_WITH_NICKNAME = 4;
-        public static final int FULL_NAME_WITH_NICKNAME_REVERSE = 5;
-        public static final int GIVEN_NAME_ONLY = 6;
-        public static final int GIVEN_NAME_ONLY_AS_NICKNAME = 7;
-        public static final int FAMILY_NAME_ONLY = 8;
-        public static final int FAMILY_NAME_ONLY_AS_NICKNAME = 9;
-        public static final int NICKNAME = 10;
-        public static final int EMAIL_BASED_NICKNAME = 11;
+        public static final int NAME_EXACT = 0;
+        public static final int NAME_VARIANT = 1;
+        public static final int NAME_COLLATION_KEY = 2;
+        public static final int NICKNAME = 3;
+        public static final int EMAIL_BASED_NICKNAME = 4;
 
         // This is the highest name lookup type code plus one
-        public static final int TYPE_COUNT = 12;
+        public static final int TYPE_COUNT = 5;
 
         public static boolean isBasedOnStructuredName(int nameLookupType) {
-            return nameLookupType != NameLookupType.EMAIL_BASED_NICKNAME
-                    && nameLookupType != NameLookupType.NICKNAME;
+            return nameLookupType == NameLookupType.NAME_EXACT
+                    || nameLookupType == NameLookupType.NAME_VARIANT
+                    || nameLookupType == NameLookupType.NAME_COLLATION_KEY;
         }
     }
 
