diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
index 94d7179..63d0815 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastReceiver.java
@@ -24,6 +24,8 @@
 import android.os.ServiceManager;
 import android.preference.PreferenceManager;
 import android.provider.Telephony;
+import android.telephony.PhoneStateListener;
+import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
 import android.telephony.cdma.CdmaSmsCbProgramData;
 import android.util.Log;
@@ -46,7 +48,11 @@
         String action = intent.getAction();
 
         if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
-            startConfigService(context);
+            if (DBG) log("Registering for ServiceState updates");
+            TelephonyManager tm = (TelephonyManager) context.getSystemService(
+                    Context.TELEPHONY_SERVICE);
+            tm.listen(new ServiceStateListener(context.getApplicationContext()),
+                    PhoneStateListener.LISTEN_SERVICE_STATE);
         } else if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {
             boolean airplaneModeOn = intent.getBooleanExtra("state", false);
             if (!airplaneModeOn) {
@@ -180,6 +186,28 @@
         return isCdma;
     }
 
+    private static class ServiceStateListener extends PhoneStateListener {
+        private final Context mContext;
+        private int mServiceState = -1;
+
+        ServiceStateListener(Context context) {
+            mContext = context;
+        }
+
+        @Override
+        public void onServiceStateChanged(ServiceState ss) {
+            int newState = ss.getState();
+            if (newState != mServiceState) {
+                Log.d(TAG, "Service state changed! " + newState + " Full: " + ss);
+                mServiceState = newState;
+                if (newState == ServiceState.STATE_IN_SERVICE ||
+                        newState == ServiceState.STATE_EMERGENCY_ONLY) {
+                    startConfigService(mContext);
+                }
+            }
+        }
+    }
+
     private static void log(String msg) {
         Log.d(TAG, msg);
     }
