diff --git a/src/com/android/providers/contacts/CallLogDatabaseHelper.java b/src/com/android/providers/contacts/CallLogDatabaseHelper.java
index 67c548a..c88b742 100644
--- a/src/com/android/providers/contacts/CallLogDatabaseHelper.java
+++ b/src/com/android/providers/contacts/CallLogDatabaseHelper.java
@@ -37,7 +37,7 @@
 public class CallLogDatabaseHelper {
     private static final String TAG = "CallLogDatabaseHelper";
 
-    private static final int DATABASE_VERSION = 3;
+    private static final int DATABASE_VERSION = 4;
 
     private static final boolean DEBUG = false; // DON'T SUBMIT WITH TRUE
 
@@ -151,7 +151,11 @@
                     Voicemails.TRANSCRIPTION + " TEXT," +
                     Voicemails.STATE + " INTEGER," +
                     Voicemails.DIRTY + " INTEGER NOT NULL DEFAULT 0," +
-                    Voicemails.DELETED + " INTEGER NOT NULL DEFAULT 0" +
+                    Voicemails.DELETED + " INTEGER NOT NULL DEFAULT 0," +
+                    Voicemails.BACKED_UP + " INTEGER NOT NULL DEFAULT 0," +
+                    Voicemails.RESTORED + " INTEGER NOT NULL DEFAULT 0," +
+                    Voicemails.ARCHIVED + " INTEGER NOT NULL DEFAULT 0," +
+                    Voicemails.IS_OMTP_VOICEMAIL + " INTEGER NOT NULL DEFAULT 0" +
                     ");");
 
             db.execSQL("CREATE TABLE " + Tables.VOICEMAIL_STATUS + " (" +
@@ -185,6 +189,10 @@
             if (oldVersion < 3) {
                 upgradeToVersion3(db);
             }
+
+            if (oldVersion < 4) {
+                upgradeToVersion4(db);
+            }
         }
     }
 
@@ -243,6 +251,17 @@
     }
 
     /**
+     * Add {@link Voicemails.BACKED_UP} {@link Voicemails.ARCHIVE} {@link
+     * Voicemails.IS_OMTP_VOICEMAIL} column to the CallLog database.
+     */
+    private void upgradeToVersion4(SQLiteDatabase db) {
+        db.execSQL("ALTER TABLE calls ADD backed_up INTEGER NOT NULL DEFAULT 0");
+        db.execSQL("ALTER TABLE calls ADD restored INTEGER NOT NULL DEFAULT 0");
+        db.execSQL("ALTER TABLE calls ADD archived INTEGER NOT NULL DEFAULT 0");
+        db.execSQL("ALTER TABLE calls ADD is_omtp_voicemail INTEGER NOT NULL DEFAULT 0");
+    }
+
+    /**
      * Perform the migration from the contacts2.db (of the latest version) to the current calllog/
      * voicemail status tables.
      */
diff --git a/src/com/android/providers/contacts/VoicemailContentTable.java b/src/com/android/providers/contacts/VoicemailContentTable.java
index 24a02bc..75f9574 100644
--- a/src/com/android/providers/contacts/VoicemailContentTable.java
+++ b/src/com/android/providers/contacts/VoicemailContentTable.java
@@ -70,6 +70,10 @@
             .add(Voicemails.DIRTY)
             .add(Voicemails.DELETED)
             .add(Voicemails.LAST_MODIFIED)
+            .add(Voicemails.BACKED_UP)
+            .add(Voicemails.RESTORED)
+            .add(Voicemails.ARCHIVED)
+            .add(Voicemails.IS_OMTP_VOICEMAIL)
             .add(OpenableColumns.DISPLAY_NAME)
             .add(OpenableColumns.SIZE)
             .build();
@@ -105,6 +109,10 @@
                 .add(Voicemails.DIRTY)
                 .add(Voicemails.DELETED)
                 .add(Voicemails.LAST_MODIFIED)
+                .add(Voicemails.BACKED_UP)
+                .add(Voicemails.RESTORED)
+                .add(Voicemails.ARCHIVED)
+                .add(Voicemails.IS_OMTP_VOICEMAIL)
                 .add(OpenableColumns.DISPLAY_NAME, createDisplayName(context))
                 .add(OpenableColumns.SIZE, "NULL")
                 .build();
diff --git a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
index b4c9e04..ea86c37 100644
--- a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
+++ b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
@@ -142,6 +142,10 @@
         values.put(Voicemails.SOURCE_DATA, "foo");
         values.put(Voicemails.PHONE_ACCOUNT_COMPONENT_NAME, "dummy_name");
         values.put(Voicemails.PHONE_ACCOUNT_ID, "dummy_account");
+        values.put(Voicemails.BACKED_UP, 1);
+        values.put(Voicemails.RESTORED, 1);
+        values.put(Voicemails.ARCHIVED, 1);
+        values.put(Voicemails.IS_OMTP_VOICEMAIL, 1);
         int count = mResolver.update(uri, values, null, null);
         assertEquals(1, count);
         assertStoredValues(uri, values);
@@ -733,6 +737,10 @@
         values.put(Voicemails.HAS_CONTENT, 0);
         values.put(Voicemails.SOURCE_DATA, "1234");
         values.put(Voicemails.STATE, Voicemails.STATE_INBOX);
+        values.put(Voicemails.BACKED_UP, 0);
+        values.put(Voicemails.RESTORED, 0);
+        values.put(Voicemails.ARCHIVED, 0);
+        values.put(Voicemails.IS_OMTP_VOICEMAIL, 0);
         return values;
     }
 
