diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
index 5e97b81..57b3b54 100644
--- a/src/com/android/providers/contacts/ContactsDatabaseHelper.java
+++ b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
@@ -949,7 +949,7 @@
          */
         String TEMPLATE_TIMES_USED =
                 ("cast(ifnull((case when (XX) <= 0 then 0"
-                + " when (XX) < (YY) then 1"
+                + " when (XX) < (YY) then (XX)"
                 + " else (cast((XX) as int) / (YY)) * (YY) end), 0) as int)")
                 .replaceAll(CONSTANT_PLACEHOLDER, String.valueOf(TIMES_USED_GRANULARITY));
 
diff --git a/tests/src/com/android/providers/contacts/ContactsDatabaseHelperTest.java b/tests/src/com/android/providers/contacts/ContactsDatabaseHelperTest.java
index de0c12a..8cf9ea4 100644
--- a/tests/src/com/android/providers/contacts/ContactsDatabaseHelperTest.java
+++ b/tests/src/com/android/providers/contacts/ContactsDatabaseHelperTest.java
@@ -466,7 +466,7 @@
         assertEquals((Object) 0, checkGetTimesUsedExpression(-10));
         assertEquals((Object) 0, checkGetTimesUsedExpression(0));
         for (int i = 1; i < 10; i++) {
-            assertEquals("value=" + i, (Object) 1, checkGetTimesUsedExpression(i));
+            assertEquals("value=" + i, (Object) i, checkGetTimesUsedExpression(i));
         }
         for (int i = 10; i < 20; i++) {
             assertEquals("value=" + i, (Object) 10, checkGetTimesUsedExpression(i));
diff --git a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
index e407a79..e9cf2a1 100644
--- a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
@@ -3023,8 +3023,8 @@
         assertStoredValue(dataUri2, Data.IS_SUPER_PRIMARY, 0);
         final Uri dataUriWithUsageType = Data.CONTENT_URI.buildUpon().appendQueryParameter(
                 DataUsageFeedback.USAGE_TYPE, usageTypeString).build();
-        assertDataUsageCursorContains(dataUriWithUsageType, emailAddress, 1,
-                1111111 / 86400 * 86400); // Returned values are lowres.
+        assertDataUsageCursorContains(dataUriWithUsageType, emailAddress, 5,
+                1111111 / 86400 * 86400);
 
         // Update AggregationException table.
         RawContactInfo aggregationContact = new RawContactInfo(
@@ -3489,7 +3489,7 @@
                 StatusUpdates.CAPABILITY_HAS_CAMERA | StatusUpdates.CAPABILITY_HAS_VIDEO);
         Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
 
-        values.put(Contacts.TIMES_CONTACTED, 1); // low res.
+        values.put(Contacts.TIMES_CONTACTED, 4);
         assertStoredValues(contactUri, values);
         assertSelection(Contacts.CONTENT_URI, values, Contacts._ID, contactId);
     }
@@ -3503,7 +3503,7 @@
         values.put(Contacts.CONTACT_CHAT_CAPABILITY, StatusUpdates.CAPABILITY_HAS_CAMERA);
         Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
 
-        values.put(Contacts.TIMES_CONTACTED, 1); // low res.
+        values.put(Contacts.TIMES_CONTACTED, 4);
 
         assertStoredValuesWithProjection(contactUri, values);
         assertSelectionWithProjection(Contacts.CONTENT_URI, values, Contacts._ID, contactId);
@@ -3527,7 +3527,7 @@
         values.put(Contacts.CONTACT_PRESENCE, StatusUpdates.INVISIBLE);
 
         Uri filterUri1 = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, "goulash");
-        values.put(Contacts.TIMES_CONTACTED, 1); // low res.
+        values.put(Contacts.TIMES_CONTACTED, 4);
         assertStoredValuesWithProjection(filterUri1, values);
 
         assertContactFilter(contactId, "goolash");
@@ -3562,7 +3562,7 @@
         values.put(Contacts.CONTACT_PRESENCE, StatusUpdates.INVISIBLE);
 
         Uri filterUri1 = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, "goog411@acme.com");
-        values.put(Contacts.TIMES_CONTACTED, 1); // low res.
+        values.put(Contacts.TIMES_CONTACTED, 4);
         assertStoredValuesWithProjection(filterUri1, values);
 
         assertContactFilter(contactId, "goog");
@@ -3589,7 +3589,7 @@
         values.put(Contacts.CONTACT_PRESENCE, StatusUpdates.INVISIBLE);
 
         Uri filterUri1 = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, "18004664411");
-        values.put(Contacts.TIMES_CONTACTED, 1); // low res.
+        values.put(Contacts.TIMES_CONTACTED, 4);
         assertStoredValuesWithProjection(filterUri1, values);
 
         assertContactFilter(contactId, "18004664411");
@@ -3648,7 +3648,7 @@
         sendFeedback(email1, DataUsageFeedback.USAGE_TYPE_LONG_TEXT, values1);
 
         // After the feedback, 1st and 3rd contacts should be shown after starred one.
-        values1.put(Contacts.TIMES_CONTACTED, 1); // Low res.
+        values1.put(Contacts.TIMES_CONTACTED, 2);
         assertStoredValuesOrderly(Contacts.CONTENT_STREQUENT_URI,
                 new ContentValues[] { values4, values1, values3 });
 
@@ -3683,10 +3683,6 @@
         final ContentValues values6 = new ContentValues(values4);
         values6.put(Phone.NUMBER, phoneNumber6);
 
-        values4.put(Contacts.TIMES_CONTACTED, 1); // Low res.
-        values5.put(Contacts.TIMES_CONTACTED, 1); // Low res.
-        values6.put(Contacts.TIMES_CONTACTED, 1); // Low res.
-
         // Phone only strequent should return all phone numbers belonging to the 4th contact,
         // and then contact 3.
         assertStoredValuesOrderly(phoneOnlyStrequentUri, new ContentValues[] {values5, values6,
@@ -3853,8 +3849,8 @@
         sendFeedback(email2, DataUsageFeedback.USAGE_TYPE_LONG_TEXT, values2);
         sendFeedback(email2, DataUsageFeedback.USAGE_TYPE_LONG_TEXT, values2);
 
-        values1.put(Contacts.TIMES_CONTACTED, 1); // low res.
-        values2.put(Contacts.TIMES_CONTACTED, 1); // low res.
+        values1.put(Contacts.TIMES_CONTACTED, 1);
+        values2.put(Contacts.TIMES_CONTACTED, 2);
         assertStoredValues(Contacts.CONTENT_FREQUENT_URI, new ContentValues[] {values2, values1});
 
         for (int i = 0; i < 10; i++) {
@@ -3927,7 +3923,7 @@
         sMockClock.setCurrentTimeMillis(86400 + 123);
         sendFeedback(email1, DataUsageFeedback.USAGE_TYPE_LONG_TEXT, values1);
 
-        assertDataUsageCursorContains(Data.CONTENT_URI, "a@acme.com", 1, 86400);
+        assertDataUsageCursorContains(Data.CONTENT_URI, "a@acme.com", 2, 86400);
 
         sMockClock.setCurrentTimeMillis(86400 * 3 + 123);
         for (int i = 0; i < 11; i++) {
@@ -3935,33 +3931,33 @@
         }
 
         // Note here, "a@acme.com" has two data stats rows, 2 and 11.  What we get here's the sum
-        // of the lowres values, so # times will be 11, instead of 10 (which is the lowres of the
+        // of the lowres values, so # times will be 12, instead of 10 (which is the lowres of the
         // sum).
-        assertDataUsageCursorContains(Data.CONTENT_URI, "a@acme.com", 11, 86400 * 3);
+        assertDataUsageCursorContains(Data.CONTENT_URI, "a@acme.com", 12, 86400 * 3);
 
         final Uri dataUriWithUsageTypeLongText = Data.CONTENT_URI.buildUpon().appendQueryParameter(
                 DataUsageFeedback.USAGE_TYPE, DataUsageFeedback.USAGE_TYPE_LONG_TEXT).build();
 
-        assertDataUsageCursorContains(dataUriWithUsageTypeLongText, "a@acme.com", 1, 86400 * 1);
+        assertDataUsageCursorContains(dataUriWithUsageTypeLongText, "a@acme.com", 2, 86400 * 1);
 
         sMockClock.setCurrentTimeMillis(86400 * 4 + 123);
         sendFeedback(email1, DataUsageFeedback.USAGE_TYPE_CALL, values1);
         sendFeedback(email1, DataUsageFeedback.USAGE_TYPE_CALL, values1);
         sendFeedback(email1, DataUsageFeedback.USAGE_TYPE_CALL, values1);
 
-        assertDataUsageCursorContains(Data.CONTENT_URI, "a@acme.com", 12, 86400 * 4);
+        assertDataUsageCursorContains(Data.CONTENT_URI, "a@acme.com", 15, 86400 * 4);
 
         sMockClock.setCurrentTimeMillis(86400 * 5 + 123);
         for (int i = 0; i < 10; i++) {
             sendFeedback(email1, DataUsageFeedback.USAGE_TYPE_CALL, values1);
         }
-        assertDataUsageCursorContains(Data.CONTENT_URI, "a@acme.com", 21, 86400 * 5);
+        assertDataUsageCursorContains(Data.CONTENT_URI, "a@acme.com", 22, 86400 * 5);
 
         sMockClock.setCurrentTimeMillis(86400 * 6 + 123);
         for (int i = 0; i < 10; i++) {
             sendFeedback(email1, DataUsageFeedback.USAGE_TYPE_CALL, values1);
         }
-        assertDataUsageCursorContains(Data.CONTENT_URI, "a@acme.com", 31, 86400 * 6);
+        assertDataUsageCursorContains(Data.CONTENT_URI, "a@acme.com", 32, 86400 * 6);
 
         final Uri dataUriWithUsageTypeCall = Data.CONTENT_URI.buildUpon().appendQueryParameter(
                 DataUsageFeedback.USAGE_TYPE, DataUsageFeedback.USAGE_TYPE_CALL).build();
@@ -4168,8 +4164,8 @@
         long nonProfileRawContactId = createBasicNonProfileContact(nonProfileValues);
         long nonProfileContactId = queryContactId(nonProfileRawContactId);
 
-        nonProfileValues.put(Contacts.TIMES_CONTACTED, 1); // low res.
-        profileValues.put(Contacts.TIMES_CONTACTED, 1); // low res.
+        nonProfileValues.put(Contacts.TIMES_CONTACTED, 4);
+        profileValues.put(Contacts.TIMES_CONTACTED, 4);
 
         assertStoredValues(Contacts.CONTENT_URI, nonProfileValues);
         assertSelection(Contacts.CONTENT_URI, nonProfileValues, Contacts._ID, nonProfileContactId);
@@ -4184,7 +4180,7 @@
         // Create a non-profile contact - this should be returned.
         ContentValues nonProfileValues = new ContentValues();
         createBasicNonProfileContact(nonProfileValues);
-        nonProfileValues.put(Contacts.TIMES_CONTACTED, 1); // low res
+        nonProfileValues.put(Contacts.TIMES_CONTACTED, 4);
         assertStoredValues(Contacts.CONTENT_URI, new ContentValues[] {nonProfileValues});
     }
 
@@ -4192,7 +4188,7 @@
         ContentValues profileValues = new ContentValues();
         createBasicProfileContact(profileValues);
 
-        profileValues.put(Contacts.TIMES_CONTACTED, 1); // low res
+        profileValues.put(Contacts.TIMES_CONTACTED, 4);
         assertStoredValues(Profile.CONTENT_URI, profileValues);
     }
 
@@ -4241,7 +4237,7 @@
 
         // The raw contact view doesn't include the photo ID.
         profileValues.remove(Contacts.PHOTO_ID);
-        profileValues.put(Contacts.TIMES_CONTACTED, 1); // low res
+        profileValues.put(Contacts.TIMES_CONTACTED, 4);
         assertStoredValues(Profile.CONTENT_RAW_CONTACTS_URI, profileValues);
     }
 
@@ -4251,7 +4247,7 @@
 
         // The raw contact view doesn't include the photo ID.
         profileValues.remove(Contacts.PHOTO_ID);
-        profileValues.put(Contacts.TIMES_CONTACTED, 1); // low res
+        profileValues.put(Contacts.TIMES_CONTACTED, 4);
         assertStoredValues(ContentUris.withAppendedId(
                 Profile.CONTENT_RAW_CONTACTS_URI, profileRawContactId), profileValues);
     }
@@ -8923,15 +8919,15 @@
         // Next, check the raw_contacts table
         assertStoredValuesWithProjection(RawContacts.CONTENT_URI,
                 cv(RawContacts._ID, rid1,
-                        RawContacts.TIMES_CONTACTED, 1,
+                        RawContacts.TIMES_CONTACTED, 2,
                         RawContacts.LAST_TIME_CONTACTED, (startTime + 86400) / 86400 * 86400
                         ),
                 cv(RawContacts._ID, rid2,
-                        RawContacts.TIMES_CONTACTED, 1,
+                        RawContacts.TIMES_CONTACTED, 3,
                         RawContacts.LAST_TIME_CONTACTED, (startTime + 86400 * 3) / 86400 * 86400
                         ),
                 cv(RawContacts._ID, rid3,
-                        RawContacts.TIMES_CONTACTED, 1,
+                        RawContacts.TIMES_CONTACTED, 2,
                         RawContacts.LAST_TIME_CONTACTED, (startTime + 86400 * 3) / 86400 * 86400
                         ),
                 cv(RawContacts._ID, rid4,
@@ -8947,11 +8943,11 @@
         // at once.
         assertStoredValuesWithProjection(Contacts.CONTENT_URI,
                 cv(Contacts._ID, cid1,
-                        Contacts.TIMES_CONTACTED, 1,
+                        Contacts.TIMES_CONTACTED, 4,
                         Contacts.LAST_TIME_CONTACTED, (startTime + 86400 * 3) / 86400 * 86400
                         ),
                 cv(Contacts._ID, cid3,
-                        Contacts.TIMES_CONTACTED, 1,
+                        Contacts.TIMES_CONTACTED, 2,
                         Contacts.LAST_TIME_CONTACTED, (startTime + 86400 * 3) / 86400 * 86400
                         ),
                 cv(Contacts._ID, cid4,
