diff --git a/rcs/presencepolling/src/com/android/service/ims/presence/DeviceBoot.java b/rcs/presencepolling/src/com/android/service/ims/presence/DeviceBoot.java
index ecab2e1..4c6eed0 100644
--- a/rcs/presencepolling/src/com/android/service/ims/presence/DeviceBoot.java
+++ b/rcs/presencepolling/src/com/android/service/ims/presence/DeviceBoot.java
@@ -53,7 +53,8 @@
         logger.debug("onReceive() in PresencePolling, intent: " +
                 intent + ", context: " + context);
 
-        if (!PollingService.isRcsSupported(context)) {
+        // Don't initialize structures if the device does not support RCS at all.
+        if (!PollingService.isRcsSupportedByDevice()) {
             return;
         }
 
diff --git a/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java b/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java
index 7977d2e..256f6af 100644
--- a/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java
+++ b/rcs/presencepolling/src/com/android/service/ims/presence/PollingService.java
@@ -29,26 +29,41 @@
 package com.android.service.ims.presence;
 
 import android.app.Service;
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.telephony.CarrierConfigManager;
-import android.os.Handler;
 import android.os.IBinder;
 import android.os.PersistableBundle;
-import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemProperties;
 
 import com.android.ims.internal.Logger;
 
+/**
+ * Manages the CapabilityPolling class. Starts capability polling when a SIM card is inserted that
+ * supports RCS Presence Capability Polling and stops the service otherwise.
+ */
 public class PollingService extends Service {
-    /**
-     * The logger
-     */
+
     private Logger logger = Logger.getLogger(this.getClass().getName());
 
     private CapabilityPolling mCapabilityPolling = null;
 
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            switch (intent.getAction()) {
+                case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: {
+                    checkAndUpdateCapabilityPollStatus();
+                    break;
+                }
+            }
+        }
+    };
+
     /**
      * Constructor
      */
@@ -60,23 +75,9 @@
     public void onCreate() {
         logger.debug("onCreate()");
 
-        if (isEabSupported(this)) {
-            mCapabilityPolling = CapabilityPolling.getInstance(this);
-            mCapabilityPolling.start();
-        }
-    }
-
-    @Override
-    public int onStartCommand(Intent intent, int flags, int startId) {
-        logger.debug("onStartCommand(), intent: " + intent +
-                ", flags: " + flags + ", startId: " + startId);
-
-        if (!isRcsSupported(this)) {
-            stopSelf();
-            return START_NOT_STICKY;
-        }
-
-        return super.onStartCommand(intent, flags, startId);
+        registerBroadcastReceiver();
+        // Check when the service starts in case the SIM info has already been loaded.
+        checkAndUpdateCapabilityPollStatus();
     }
 
     /**
@@ -106,12 +107,31 @@
         return null;
     }
 
-    static boolean isRcsSupported(Context context) {
-        return isRcsSupportedByDevice() && isRcsSupportedByCarrier(context);
+    private void registerBroadcastReceiver() {
+        IntentFilter filter = new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
+        registerReceiver(mReceiver, filter);
     }
 
-    private static boolean isEabSupported(Context context) {
-        return isEabSupportedByDevice() && isRcsSupportedByCarrier(context);
+    private void checkAndUpdateCapabilityPollStatus() {
+        // If the carrier doesn't support RCS Presence, stop polling.
+        if (!isRcsSupportedByCarrier(this)) {
+            logger.info("RCS not supported by carrier. Stopping CapabilityPolling");
+            if (mCapabilityPolling != null) {
+                mCapabilityPolling.stop();
+                mCapabilityPolling = null;
+            }
+            return;
+        }
+        // Carrier supports, so start the service if it hasn't already been started.
+        if (mCapabilityPolling == null) {
+            logger.info("Starting CapabilityPolling...");
+            mCapabilityPolling = CapabilityPolling.getInstance(this);
+            mCapabilityPolling.start();
+        }
+    }
+
+    static boolean isRcsSupported(Context context) {
+        return isRcsSupportedByDevice() && isRcsSupportedByCarrier(context);
     }
 
     private static boolean isRcsSupportedByCarrier(Context context) {
@@ -125,13 +145,8 @@
         return true;
     }
 
-    private static boolean isRcsSupportedByDevice() {
+    public static boolean isRcsSupportedByDevice() {
         String rcsSupported = SystemProperties.get("persist.rcs.supported");
         return "1".equals(rcsSupported);
     }
-
-    private static boolean isEabSupportedByDevice() {
-        String eabSupported = SystemProperties.get("persist.eab.supported");
-        return ("0".equals(eabSupported)) ? false : true;
-    }
 }
diff --git a/rcs/presencepolling/src/com/android/service/ims/presence/PollingsQueue.java b/rcs/presencepolling/src/com/android/service/ims/presence/PollingsQueue.java
index b833de7..4b75ae3 100644
--- a/rcs/presencepolling/src/com/android/service/ims/presence/PollingsQueue.java
+++ b/rcs/presencepolling/src/com/android/service/ims/presence/PollingsQueue.java
@@ -190,7 +190,7 @@
             return;
         }
 
-        logger.print("Remove polling task: " + task);
+        logger.debug("Remove polling task: " + task);
         if (task != null) {
             for (int i = 0; i < nTasks; i++) {
                 PollingTask task0 = mPollingTasks.get(i);
diff --git a/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java b/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java
index 5abc19f..e23ec09 100644
--- a/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java
+++ b/rcs/rcsservice/src/com/android/service/ims/presence/StackListener.java
@@ -530,6 +530,10 @@
                 }
             }
         }
+
+        public void unpublishMessageSent() {
+            logger.debug("unpublishMessageSent()");
+        }
     };
 }
 
