diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 51fab84..b802dee 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -102,6 +102,9 @@
     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
+    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+    <uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" />
+    <uses-permission android:name="com.android.voicemail.permission.WRITE_VOICEMAIL" />
 
     <!-- This tells the activity manager to not delay any of our activity
          start requests, even if they happen immediately after the user
@@ -624,5 +627,11 @@
             android:name="android.accounts.AccountAuthenticator"
             android:resource="@xml/authenticator" />
        </service>
+        <receiver android:name="com.android.phone.vvm.omtp.SimChangeReceiver"
+            android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.SIM_STATE_CHANGED" />
+            </intent-filter>
+        </receiver>
     </application>
 </manifest>
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index f7c5939..bd911ac 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -36,6 +36,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.telecom.VideoProfile;
 import android.telephony.PhoneNumberUtils;
+import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.text.TextUtils;
 import android.util.Log;
@@ -2449,6 +2450,10 @@
                 == Configuration.ORIENTATION_LANDSCAPE;
     }
 
+    public static PhoneAccountHandle makePstnPhoneAccountHandle(String id) {
+        return makePstnPhoneAccountHandleWithPrefix(id, "", false);
+    }
+
     public static PhoneAccountHandle makePstnPhoneAccountHandle(int phoneId) {
         return makePstnPhoneAccountHandle(PhoneFactory.getPhone(phoneId));
     }
@@ -2459,10 +2464,15 @@
 
     public static PhoneAccountHandle makePstnPhoneAccountHandleWithPrefix(
             Phone phone, String prefix, boolean isEmergency) {
-        ComponentName pstnConnectionServiceName = getPstnConnectionServiceName();
         // TODO: Should use some sort of special hidden flag to decorate this account as
         // an emergency-only account
         String id = isEmergency ? "E" : prefix + String.valueOf(phone.getIccSerialNumber());
+        return makePstnPhoneAccountHandleWithPrefix(id, prefix, isEmergency);
+    }
+
+    public static PhoneAccountHandle makePstnPhoneAccountHandleWithPrefix(
+            String id, String prefix, boolean isEmergency) {
+        ComponentName pstnConnectionServiceName = getPstnConnectionServiceName();
         return new PhoneAccountHandle(pstnConnectionServiceName, id);
     }
 
@@ -2484,6 +2494,19 @@
         return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     }
 
+    /**
+     * Determine if a given phone account corresponds to an active SIM
+     *
+     * @param sm An instance of the subscription manager so it is not recreated for each calling of
+     * this method.
+     * @param handle The handle for the phone account to check
+     * @return {@code true} If there is an active SIM for this phone account,
+     * {@code false} otherwise.
+     */
+    public static boolean isPhoneAccountActive(SubscriptionManager sm, PhoneAccountHandle handle) {
+        return sm.getActiveSubscriptionInfoForIccIndex(handle.getId()) != null;
+    }
+
     private static ComponentName getPstnConnectionServiceName() {
         return new ComponentName(PhoneGlobals.getInstance(), TelephonyConnectionService.class);
     }
@@ -2497,7 +2520,6 @@
                 }
             }
         }
-
         return null;
     }
 
diff --git a/src/com/android/phone/vvm/omtp/OmtpVvmSyncAccountManager.java b/src/com/android/phone/vvm/omtp/OmtpVvmSyncAccountManager.java
index de39745..a4cf4e8 100644
--- a/src/com/android/phone/vvm/omtp/OmtpVvmSyncAccountManager.java
+++ b/src/com/android/phone/vvm/omtp/OmtpVvmSyncAccountManager.java
@@ -19,8 +19,13 @@
 import android.accounts.AccountManager;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.provider.VoicemailContract;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.SubscriptionManager;
 import android.util.Log;
 
+import com.android.phone.PhoneUtils;
+
 /**
  * A singleton class designed to assist in OMTP visual voicemail sync behavior.
  */
@@ -34,6 +39,8 @@
 
     private static OmtpVvmSyncAccountManager sInstance = new OmtpVvmSyncAccountManager();
 
+    private Context mContext;
+    private SubscriptionManager mSubscriptionManager;
     private AccountManager mAccountManager;
 
     /**
@@ -42,16 +49,18 @@
     private OmtpVvmSyncAccountManager() {}
 
     public static OmtpVvmSyncAccountManager getInstance(Context context) {
-        sInstance.setAccountManager(context);
+        sInstance.setup(context);
         return sInstance;
     }
 
     /**
-     * Set the account manager so it does not need to be retrieved every time.
-     * @param context The context to get the account manager for.
+     * Set the context and system services so they do not need to be retrieved every time.
+     * @param context The context to get the account manager and subscription manager for.
      */
-    private void setAccountManager(Context context) {
-        if (mAccountManager == null) {
+    private void setup(Context context) {
+        if (mContext == null) {
+            mContext = context;
+            mSubscriptionManager = SubscriptionManager.from(context);
             mAccountManager = AccountManager.get(context);
         }
     }
@@ -74,6 +83,26 @@
     }
 
     /**
+     * When a voicemail source is removed, we don't always know which one was removed. Check the
+     * list of registered sync accounts against the active subscriptions list and remove the
+     * inactive accounts.
+     */
+    public void removeInactiveAccounts() {
+        Account[] registeredAccounts = mAccountManager.getAccountsByType(ACCOUNT_TYPE);
+        for (int i = 0; i < registeredAccounts.length; i++) {
+            PhoneAccountHandle handle = PhoneUtils.makePstnPhoneAccountHandle(
+                    registeredAccounts[i].name);
+            if (!PhoneUtils.isPhoneAccountActive(mSubscriptionManager, handle)) {
+                mAccountManager.removeAccount(registeredAccounts[i], null, null, null);
+                VoicemailContract.Status.setStatus(mContext, handle,
+                        VoicemailContract.Status.CONFIGURATION_STATE_NOT_CONFIGURED,
+                        VoicemailContract.Status.DATA_CHANNEL_STATE_NO_CONNECTION,
+                        VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION);
+            }
+        }
+    }
+
+    /**
      * Check if a certain account is registered.
      *
      * @param account The account to look for.
diff --git a/src/com/android/phone/vvm/omtp/SimChangeReceiver.java b/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
new file mode 100644
index 0000000..b16b9c2
--- /dev/null
+++ b/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.phone.vvm.omtp;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+import com.android.internal.telephony.IccCardConstants;
+
+/**
+ * In order to determine when a SIM is added or removed, this class listens for changes to the
+ * SIM state. On SIM state "absent", this means a SIM was removed. On SIM state "loaded", this means
+ * a SIM is ready.
+ *
+ * When a SIM is added, send an activate SMS. When a SIM is removed, remove the sync accounts and
+ * change the status in the voicemail_status table.
+ */
+public class SimChangeReceiver extends BroadcastReceiver {
+    private final String TAG = "SimChangeReceiver";
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        String state = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);
+        Log.i(TAG, state);
+        switch (state) {
+            case IccCardConstants.INTENT_VALUE_ICC_ABSENT:
+                OmtpVvmSyncAccountManager.getInstance(context).removeInactiveAccounts();
+                break;
+            case IccCardConstants.INTENT_VALUE_ICC_LOADED:
+                //TODO: get carrier configuration values and send activation SMS
+                break;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java b/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
index 932fb1a..c00441a 100644
--- a/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
+++ b/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
@@ -97,9 +97,6 @@
                     VoicemailContract.Status.DATA_CHANNEL_STATE_OK,
                     VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE_OK);
         }
-
-        //TODO: figure out how to pass IMAP credentials to sync adapter
-
         ContentResolver.requestSync(account, VoicemailContract.AUTHORITY, new Bundle());
     }
 }
