diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java
index 32933be7001e4ae1db1551e718fdb108284b14c0..a0af992a915f00cd4c9ca02e5d240b3371f5ba2a 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java
@@ -29,36 +29,43 @@ public class MedtronicCnlAlarmReceiver extends WakefulBroadcastReceiver {
     }
 
     public void setContext(Context context) {
-        if (am != null && pi != null) {
-            // here is an old alarm. So we cancel it before
-            cancelAlarm();
-        }
+        cancelAlarm();
+
         am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
         Intent intent = new Intent(context, MedtronicCnlAlarmReceiver.class);
         pi = PendingIntent.getBroadcast(context, ALARM_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
     }
 
-    // Setting the alarm to call onRecieve every _REFRESH_INTERVAL seconds
+    // Setting the alarm in 15 seconds from now
     public void setAlarm() {
         setAlarm(System.currentTimeMillis());
     }
 
     // Setting the alarm to call onRecieve
     public void setAlarm(long millis) {
-        try {
-            am.cancel(pi);
-        } catch (Exception ignored) {}
-        Log.d(TAG, "AlarmManager set to fire at " + new Date(millis));
+        if (am == null || pi == null)
+            return;
+
+        cancelAlarm();
+
+        // don't trigger the past and at least 30 sec away
+        if (millis < System.currentTimeMillis())
+            millis = System.currentTimeMillis();
+
+        Log.d(TAG, "AlarmManager set to fire   at " + new Date(millis));
         am.setExact(AlarmManager.RTC_WAKEUP, millis, pi);
     }
 
     // restarting the alarm after MedtronicCnlIntentService.POLL_PERIOD_MS from now
     public void restartAlarm() {
-        setAlarm(System.currentTimeMillis() + MedtronicCnlIntentService.POLL_PERIOD_MS);
+        setAlarm(System.currentTimeMillis() + MedtronicCnlIntentService.POLL_PERIOD_MS + MedtronicCnlIntentService.POLL_GRACE_PERIOD_MS);
     }
 
     // Cancel the alarm.
     public void cancelAlarm() {
+        if (am == null || pi == null)
+            return;
+
         am.cancel(pi);
     }