diff --git a/src/com/android/providers/contacts/DbModifierWithNotification.java b/src/com/android/providers/contacts/DbModifierWithNotification.java
index 0580339..852301d 100644
--- a/src/com/android/providers/contacts/DbModifierWithNotification.java
+++ b/src/com/android/providers/contacts/DbModifierWithNotification.java
@@ -167,7 +167,8 @@
         Set<String> packagesModified = getModifiedPackages(whereClause, whereArgs);
         packagesModified.addAll(getModifiedPackages(values));
 
-        boolean isVoicemail = packagesModified.size() != 0 && isUpdatingVoicemailColumns(values);
+        boolean isVoicemailContent =
+                packagesModified.size() != 0 && isUpdatingVoicemailColumns(values);
 
         boolean hasMarkedRead = false;
         if (mIsCallsTable) {
@@ -177,7 +178,7 @@
             } else {
                 updateLastModified(table, whereClause, whereArgs);
             }
-            if (isVoicemail) {
+            if (isVoicemailContent) {
                 if (updateDirtyFlag(values, packagesModified)) {
                     if (values.containsKey(Calls.IS_READ)
                             && getAsBoolean(values,
@@ -196,7 +197,7 @@
             return 0;
         }
         int count = mDb.update(table, values, whereClause, whereArgs);
-        if (count > 0 && isVoicemail) {
+        if (count > 0 && isVoicemailContent || Tables.VOICEMAIL_STATUS.equals(table)) {
             notifyVoicemailChange(mBaseUri, packagesModified);
         }
         if (count > 0 && mIsCallsTable) {
diff --git a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
index 9f9ef00..d20b9b3 100644
--- a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
+++ b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
@@ -21,8 +21,10 @@
 
 import android.content.ContentUris;
 import android.content.ContentValues;
+import android.database.ContentObserver;
 import android.database.Cursor;
 import android.net.Uri;
+import android.os.Handler;
 import android.os.ParcelFileDescriptor;
 import android.os.Process;
 import android.provider.CallLog;
@@ -739,6 +741,28 @@
         assertStoredValues(uri, values);
     }
 
+    public void testStatusUpdate_observerNotified() throws Exception {
+        Uri uri = insertTestStatusEntry();
+        ContentValues values = getTestStatusValues();
+        values.put(Status.DATA_CHANNEL_STATE, Status.DATA_CHANNEL_STATE_NO_CONNECTION);
+        values.put(Status.NOTIFICATION_CHANNEL_STATE,
+            Status.NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING);
+        values.put(Status.SOURCE_TYPE,
+            "vvm_type_test2");
+        Boolean[] observerTriggered = new Boolean[]{false};
+        mResolver.registerContentObserver(Status.CONTENT_URI, true,
+            new ContentObserver(new Handler()) {
+                @Override
+                public void onChange(boolean selfChange, Uri uri) {
+                    observerTriggered[0] = true;
+                }
+            });
+
+        mResolver.update(uri, values, null, null);
+
+        assertTrue(observerTriggered[0]);
+    }
+
     public void testStatusUpsert() throws Exception {
         ContentValues values = getTestStatusValues();
         mResolver.insert(statusUri(), values);
