diff --git a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java
index 252be87537314a763da28b4ce20c5c1b4a46ae53..436ca5ac3d51958f55b50bd2e9e70c2929e28fc3 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java
@@ -447,7 +447,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
         // userlog message at startup when no service is running
         if (!mPrefs.getBoolean("EnableCgmService", false)) {
 
-            UserLogMessage.getInstance().add(UserLogMessage.TYPE.HEART, R.string.main_hello);
+            UserLogMessage.getInstance().add(UserLogMessage.TYPE.STARTUP, R.string.main_hello);
 
             UserLogMessage.getInstance().add(UserLogMessage.TYPE.OPTION,
                     String.format("{id;%s} {id;%s}",
@@ -494,7 +494,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
     private void shutdownMessage() {
         // userlog message at shutdown when 'stop collecting data' selected
         if (!mPrefs.getBoolean("EnableCgmService", false)) {
-            UserLogMessage.getInstance().add(UserLogMessage.TYPE.HEART, R.string.main_goodbye);
+            UserLogMessage.getInstance().add(UserLogMessage.TYPE.SHUTDOWN, R.string.main_goodbye);
             UserLogMessage.getInstance().add("---------------------------------------------------");
         }
     }
@@ -1051,6 +1051,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
             fabCurrent = findViewById(R.id.fab_log_current);
             fabCurrent.hide();
 
+            // return to most recent log entry
             fabCurrent.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View view) {
@@ -1076,6 +1077,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
             fabSearch = findViewById(R.id.fab_log_search);
             fabSearch.hide();
 
+            // search click: in normal mode will scroll to errors/warnings, in extended mode this includes notes
             fabSearch.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View view) {
@@ -1109,6 +1111,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
                 }
             });
 
+            // search long click: in normal mode will scroll to the start of a session, in extended mode to notes
             fabSearch.setOnLongClickListener(new View.OnLongClickListener() {
                 @Override
                 public boolean onLongClick(View view) {
@@ -1119,26 +1122,29 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
 
                             RealmResults<UserLog> rr = userLogResults.where()
                                     .lessThan("timestamp", userLogResults.get(p).getTimestamp())
-                                    .equalTo("type", extended ? UserLogMessage.TYPE.NOTE.value() : UserLogMessage.TYPE.WARN.value())
+                                    .equalTo("type", extended ? UserLogMessage.TYPE.NOTE.value() : UserLogMessage.TYPE.STARTUP.value())
                                     .sort("timestamp", Sort.DESCENDING)
                                     .findAll();
 
+                            int to = 0;
                             if (rr.size() > 0) {
                                 int ss = userLogResults.indexOf(rr.first());
                                 int c = realmRecyclerView.getRecycleView().getLayoutManager().getChildCount() / 4;
-                                int to = ss - (c < 1 ? 1 : c);
+                                to = ss - (c < 1 ? 1 : c);
                                 if (to < 0) to = 0;
-                                if (Math.abs(p - to) > 400)
-                                    realmRecyclerView.scrollToPosition(to);
-                                else
-                                    realmRecyclerView.smoothScrollToPosition(to);
                             }
+
+                            if (Math.abs(p - to) > 400)
+                                realmRecyclerView.scrollToPosition(to);
+                            else
+                                realmRecyclerView.smoothScrollToPosition(to);
                         }
                     }
                     return true;
                 }
             });
 
+            // show/hide the floating log buttons
             RecyclerView rv = realmRecyclerView.getRecycleView();
             rv.addOnScrollListener(new RecyclerView.OnScrollListener() {
                 @Override
@@ -1160,6 +1166,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
                 }
             });
 
+            // don't autoscroll the log when screen is being touched by user
             rv.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
                 @Override
                 public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
diff --git a/app/src/main/java/info/nightscout/android/medtronic/UserLogAdapter.java b/app/src/main/java/info/nightscout/android/medtronic/UserLogAdapter.java
index 6df08fa5d59489aa6aff972d442e040f163b8149..e3bf0a3a755bbf2b253e1eaffb00792dd26a9819 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/UserLogAdapter.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/UserLogAdapter.java
@@ -30,6 +30,7 @@ public class UserLogAdapter
 
     private final static int FADE_DURATION_MS = 400;
 
+    private final static int cDEFAULT = 0xFFC0C0C0;
     private final static int cHIGHLIGHT = 0xFFE0E0E0;
     private final static int cCLOCK = 0xFFA0A0A0;
     private final static int cWARN = 0xFFE0E000;
@@ -154,6 +155,8 @@ public class UserLogAdapter
                 ssb.setSpan(new ImageSpan(iSETTING, DynamicDrawableSpan.ALIGN_BASELINE), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                 ssb.setSpan(new ForegroundColorSpan(cHIGHLIGHT), 3, text.length() + 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                 break;
+            case STARTUP:
+            case SHUTDOWN:
             case HEART:
                 ssb.append(" * ").append(text);
                 ssb.setSpan(new ImageSpan(iHEART, DynamicDrawableSpan.ALIGN_BASELINE), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
@@ -180,6 +183,7 @@ public class UserLogAdapter
                 break;
             default:
                 ssb.append(" ").append(text);
+                ssb.setSpan(new ForegroundColorSpan(cDEFAULT), 1, text.length() + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
         }
 
         ssb.insert(0, clock);
@@ -191,22 +195,20 @@ public class UserLogAdapter
 
     private void initIcons(TextView tv) {
 
-        cDefault = tv.getCurrentTextColor();
         iBounds = (int) (tv.getTextSize() * 1.2);
         iOffsetXDp = 0;
         iOffsetYDp = 3;
 
         iWARN = icon("ion_alert_circled", cWARN);
         iINFO = icon("ion_information_circled", cHIGHLIGHT);
-        //iNOTE = icon("ion_clipboard", cHIGHLIGHT);
         iNOTE = icon("ion_document", cHIGHLIGHT);
         //iNOTE = icon("ion_stats_bars", cHIGHLIGHT);
         iHELP = icon("ion_ios_lightbulb", cHIGHLIGHT);
         iCGM = icon("ion_ios_pulse_strong", cCGM);
         iHEART = icon("ion_heart", cHEART);
         iSHARE = icon("ion_android_share_alt", cHIGHLIGHT);
-        //iREFRESH = icon("ion_loop", cDefault);
-        iREFRESH = icon("ion_refresh", cDefault);
+        //iREFRESH = icon("ion_loop", cDEFAULT);
+        iREFRESH = icon("ion_refresh", cDEFAULT);
         iSETTING = icon("ion_android_settings", cHIGHLIGHT);
     }
 
diff --git a/app/src/main/java/info/nightscout/android/medtronic/UserLogMessage.java b/app/src/main/java/info/nightscout/android/medtronic/UserLogMessage.java
index 7969b358bebb648434e99d1e603b707743aaca80..ee5d708b641f9e66cb9631175cf5ad364f62f727 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/UserLogMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/UserLogMessage.java
@@ -187,6 +187,8 @@ public class UserLogMessage {
         REQUESTED(11),
         RECEIVED(12),
         SHARE(13),
+        STARTUP(14),
+        SHUTDOWN(15),
         NA(-1);
 
         private int value;
diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MasterService.java b/app/src/main/java/info/nightscout/android/medtronic/service/MasterService.java
index ab207f965a6e35664be59ebe4be3e558af94cf63..2c5018b5cdd2141652b9600bc8a8f3a3fb1b3091 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/service/MasterService.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/service/MasterService.java
@@ -258,9 +258,10 @@ public class MasterService extends Service {
 
             statusNotification.initNotification(mContext);
 
-            startCgmService();
-
             serviceActive = true;
+
+            uploadPollResults();
+            startCgmService();
         }
 
         return START_STICKY;
diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlService.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlService.java
index bc0f5a0ffd8b439942acf3682756649767fb8132..85d3ee32a7ee15b6dbf2a2ba6b3d8a9bcdfa5ed9 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlService.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlService.java
@@ -513,7 +513,8 @@ CNL: unpaired PUMP: unpaired UPLOADER: unregistered = "Invalid message received
                             // skip if pump battery is low and interval time is higher then poll period, process history once per hour
 
                             if (!pumpRecord.isOldSgvWhenNewExpected() &&
-                                    !(pumpBatteryError > 0 && dataStore.getLowBatPollInterval() > POLL_PERIOD_MS
+                                    !(pumpBatteryError > 0
+                                            && dataStore.getLowBatPollInterval() > POLL_PERIOD_MS
                                             && pumpHistoryHandler.pumpHistoryRecency() < 60 * 60000L)) {
 
                                 if (dataStore.isRequestProfile()) {
diff --git a/app/src/main/java/info/nightscout/android/utils/FormatKit.java b/app/src/main/java/info/nightscout/android/utils/FormatKit.java
index 86488f26b02e7e38f7900742efb46354d040c62b..629607ad80ba926cbb6ce97175a398c26f022247 100644
--- a/app/src/main/java/info/nightscout/android/utils/FormatKit.java
+++ b/app/src/main/java/info/nightscout/android/utils/FormatKit.java
@@ -46,6 +46,12 @@ public class FormatKit {
         return sInstance;
     }
 
+    // set the language to use for formatting
+    public FormatKit mode(int mode) {
+
+        return this;
+    }
+
     public String formatAsGrams(Double value) {
         DecimalFormat df = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.getDefault()));
         df.setMinimumFractionDigits(0);
@@ -110,22 +116,6 @@ public class FormatKit {
         DecimalFormat df = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.getDefault()));
         return df.format(value);
     }
-/*
-    public String formatSecondsAsDiff(int seconds) {
-        int d = Math.abs(seconds) / 86400;
-        int h = (Math.abs(seconds) % 86400) / 3600;
-        int m = (Math.abs(seconds) % 3600) / 60;
-        int s = Math.abs(seconds) % 60;
-
-        String t = seconds < 0 ? "-" : "+";
-        if (d > 0) t += d + mApplication.getApplicationContext().getString(R.string.time_d);
-        else if (h > 0) t += h + mApplication.getApplicationContext().getString(R.string.time_h);
-        else if (m > 0) t += m + mApplication.getApplicationContext().getString(R.string.time_m);
-        else t += s + mApplication.getApplicationContext().getString(R.string.time_s);
-
-        return t;
-    }
-    */
 
     public String formatSecondsAsDiff(int seconds) {
         return (seconds < 0 ? "-" : "+") + formatSecondsAsDHMS(Math.abs(seconds));
@@ -151,14 +141,6 @@ public class FormatKit {
                 m + mApplication.getApplicationContext().getString(R.string.time_m);
     }
 
-    /*
-    public String formatMinutesAsHM(int minutes) {
-        int h = minutes / 60;
-        int m = minutes % 60;
-        return (h > 0 ? h + mContext.getString(R.string.time_h) : "") +
-                m + mContext.getString(R.string.time_m);
-    }
-    */
     public String formatMinutesAsHM(int minutes) {
         int h = minutes / 60;
         int m = minutes % 60;