diff --git a/src/com/android/providers/contacts/OpenHelper.java b/src/com/android/providers/contacts/OpenHelper.java
index f7ce82c..53be513 100644
--- a/src/com/android/providers/contacts/OpenHelper.java
+++ b/src/com/android/providers/contacts/OpenHelper.java
@@ -57,7 +57,7 @@
 /* package */ class OpenHelper extends SQLiteOpenHelper {
     private static final String TAG = "OpenHelper";
 
-    private static final int DATABASE_VERSION = 54;
+    private static final int DATABASE_VERSION = 55;
     private static final String DATABASE_NAME = "contacts2.db";
     private static final String DATABASE_PRESENCE = "presence_db";
 
@@ -568,25 +568,8 @@
         ");");
 
         /**
-         * set contact.dirty whenever the contact is updated and the new version does not explicity
-         * clear the dirty flag
-         *
-         * Want to have a data row that has the server version of the contact. Then when I save
-         * an entry from the server into the provider I will set the server version of the data
-         * while also clearing the dirty flag of the contact.
-         *
-         * increment the contact.version whenever the contact is updated
+         * Automatically delete Data rows when a raw contact is deleted.
          */
-        db.execSQL("CREATE TRIGGER " + Tables.RAW_CONTACTS + "_updated1 "
-                + "   BEFORE UPDATE ON " + Tables.RAW_CONTACTS
-                + " BEGIN "
-                + "   UPDATE " + Tables.RAW_CONTACTS
-                + "     SET "
-                +         RawContacts.VERSION + "=OLD." + RawContacts.VERSION + "+1, "
-                +         RawContacts.DIRTY + "=1"
-                + "     WHERE " + RawContacts._ID + "=OLD." + RawContacts._ID + ";"
-                + " END");
-
         db.execSQL("CREATE TRIGGER " + Tables.RAW_CONTACTS + "_deleted "
                 + "   BEFORE DELETE ON " + Tables.RAW_CONTACTS
                 + " BEGIN "
@@ -596,27 +579,46 @@
                 + "     WHERE " + PhoneLookupColumns.RAW_CONTACT_ID + "=OLD." + RawContacts._ID + ";"
                 + " END");
 
+        /**
+         * Triggers that set {@link RawContacts#DIRTY} and update {@link RawContacts#VERSION}
+         * when the contact is marked for deletion or any time a data row is inserted, updated
+         * or deleted.
+         */
+        db.execSQL("CREATE TRIGGER " + Tables.RAW_CONTACTS + "_marked_deleted "
+                + "   BEFORE UPDATE ON " + Tables.RAW_CONTACTS
+                + " BEGIN "
+                + "   UPDATE " + Tables.RAW_CONTACTS
+                + "     SET "
+                +         RawContacts.VERSION + "=OLD." + RawContacts.VERSION + "+1, "
+                +         RawContacts.DIRTY + "=1"
+                + "     WHERE " + RawContacts._ID + "=OLD." + RawContacts._ID
+                + "       AND NEW." + RawContacts.DELETED + "!= OLD." + RawContacts.DELETED + ";"
+                + " END");
+
         db.execSQL("CREATE TRIGGER " + Tables.DATA + "_updated AFTER UPDATE ON " + Tables.DATA
                 + " BEGIN "
                 + "   UPDATE " + Tables.DATA
                 + "     SET " + Data.DATA_VERSION + "=OLD." + Data.DATA_VERSION + "+1 "
                 + "     WHERE " + Data._ID + "=OLD." + Data._ID + ";"
                 + "   UPDATE " + Tables.RAW_CONTACTS
-                + "     SET " + RawContacts.DIRTY + "=1"
+                + "     SET " + RawContacts.DIRTY + "=1, "
+                + "         " +	RawContacts.VERSION + "=" + RawContacts.VERSION + "+1 "
                 + "     WHERE " + RawContacts._ID + "=OLD." + Data.RAW_CONTACT_ID + ";"
                 + " END");
 
         db.execSQL("CREATE TRIGGER " + Tables.DATA + "_inserted BEFORE INSERT ON " + Tables.DATA
                 + " BEGIN "
                 + "   UPDATE " + Tables.RAW_CONTACTS
-                + "     SET " + RawContacts.DIRTY + "=1"
+                + "     SET " + RawContacts.DIRTY + "=1, "
+                + "         " + RawContacts.VERSION + "=" + RawContacts.VERSION + "+1 "
                 + "     WHERE " + RawContacts._ID + "=NEW." + Data.RAW_CONTACT_ID + ";"
                 + " END");
 
         db.execSQL("CREATE TRIGGER " + Tables.DATA + "_deleted BEFORE DELETE ON " + Tables.DATA
                 + " BEGIN "
                 + "   UPDATE " + Tables.RAW_CONTACTS
-                + "     SET " + RawContacts.DIRTY + "=1"
+                + "     SET " + RawContacts.DIRTY + "=1,"
+                + "         " + RawContacts.VERSION + "=" + RawContacts.VERSION + "+1 "
                 + "     WHERE " + RawContacts._ID + "=OLD." + Data.RAW_CONTACT_ID + ";"
                 + "   DELETE FROM " + Tables.PHONE_LOOKUP
                 + "     WHERE " + PhoneLookupColumns.DATA_ID + "=OLD." + Data._ID + ";"
diff --git a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
index ec253c3..3a31e21 100644
--- a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
@@ -392,7 +392,7 @@
                 null));
     }
 
-    public void testContactDirtySetOnChange() {
+    public void testRawContactDirtySetOnChange() {
         Uri uri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI,
                 createRawContact(mAccount));
         assertDirty(uri, true);
@@ -400,7 +400,7 @@
         assertDirty(uri, false);
     }
 
-    public void testContactDirtyAndVersion() {
+    public void testRawContactDirtyAndVersion() {
         final long rawContactId = createRawContact(mAccount);
         Uri uri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, rawContactId);
         assertDirty(uri, true);
@@ -409,34 +409,19 @@
         ContentValues values = new ContentValues();
         values.put(ContactsContract.RawContacts.DIRTY, 0);
         values.put(ContactsContract.RawContacts.SEND_TO_VOICEMAIL, 1);
+        values.put(ContactsContract.RawContacts.AGGREGATION_MODE,
+                RawContacts.AGGREGATION_MODE_IMMEDITATE);
+        values.put(ContactsContract.RawContacts.STARRED, 1);
         assertEquals(1, mResolver.update(uri, values, null, null));
-        ++version;
         assertEquals(version, getVersion(uri));
 
         assertDirty(uri, false);
 
-        values = new ContentValues();
-        values.put(ContactsContract.RawContacts.SEND_TO_VOICEMAIL, 0);
-        assertEquals(1, mResolver.update(uri, values, null, null));
-        ++version;
-        assertEquals(version, getVersion(uri));
-
-        assertDirty(uri, true);
-
-        clearDirty(uri);
-        assertDirty(uri, false);
-        ++version;
-        assertEquals(version, getVersion(uri));
-
         Uri emailUri = insertEmail(rawContactId, "goo@woo.com");
         assertDirty(uri, true);
         ++version;
-        version = getVersion(uri);
-
-        clearDirty(uri);
-        assertDirty(uri, false);
-        ++version;
         assertEquals(version, getVersion(uri));
+        clearDirty(uri);
 
         values = new ContentValues();
         values.put(Email.DATA, "goo@hoo.com");
@@ -444,21 +429,42 @@
         assertDirty(uri, true);
         ++version;
         assertEquals(version, getVersion(uri));
-
         clearDirty(uri);
-        assertDirty(uri, false);
+
+        mResolver.delete(emailUri, null, null);
+        assertDirty(uri, true);
         ++version;
         assertEquals(version, getVersion(uri));
     }
 
-    public void testContactVersionUpdates() {
+    public void testRawContactClearDirty() {
+        final long rawContactId = createRawContact(mAccount);
         Uri uri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI,
-                createRawContact(mAccount));
+                rawContactId);
         long version = getVersion(uri);
-        ContentValues values = new ContentValues();
-        values.put(ContactsContract.RawContacts.SEND_TO_VOICEMAIL, 1);
-        mResolver.update(uri, values, null, null);
-        assertEquals(version + 1, getVersion(uri));
+        insertEmail(rawContactId, "goo@woo.com");
+        assertDirty(uri, true);
+        version++;
+        assertEquals(version, getVersion(uri));
+
+        clearDirty(uri);
+        assertDirty(uri, false);
+        assertEquals(version, getVersion(uri));
+    }
+
+    public void testRawContactDeletionSetsDirty() {
+        final long rawContactId = createRawContact(mAccount);
+        Uri uri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI,
+                rawContactId);
+        long version = getVersion(uri);
+        clearDirty(uri);
+        assertDirty(uri, false);
+
+        mResolver.delete(uri, null, null);
+        assertStoredValues(uri, RawContacts.DELETED, "1");
+        assertDirty(uri, true);
+        version++;
+        assertEquals(version, getVersion(uri));
     }
 }
 
