diff --git a/app/build.gradle b/app/build.gradle
index fba04a1fb56ac9bda515bfd66bd61d481ffbb444..d56d8ad55cc1a0a9301be4ed218ff180c6fae07c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,3 +1,5 @@
+import org.ajoberstar.grgit.Grgit
+
 buildscript {
     repositories {
         maven { url 'https://maven.fabric.io/public' }
@@ -6,6 +8,7 @@ buildscript {
     dependencies {
         classpath 'io.fabric.tools:gradle:1.21.6'
         classpath 'io.realm:realm-gradle-plugin:1.1.0'
+        classpath 'org.ajoberstar:grgit:1.5.0'
     }
 }
 plugins {
@@ -23,8 +26,25 @@ apply plugin: 'io.fabric'
 apply plugin: 'realm-android'
 
 def gitVersion() {
-    def process = ['sh', '-c', 'git tag -l | grep -c ".*" -'].execute().text.trim()
-    return process.toInteger() + 1
+    // current dir is <your proj>/app, so it's likely that all your git repo files are in the dir
+    // above.
+    ext.repo = Grgit.open(project.file('..'))
+
+    // should result in the same value as running
+    // git tag -l | wc -l or git tag -l | grep -c ".*" -
+    def numOfTags = ext.repo.tag.list().size()
+    return numOfTags
+}
+
+def gitCommitId() {
+    //def process = ['sh', '-c', 'git tag -l | grep -c ".*" -'].execute().text.trim()
+    //return process.toInteger() + 1
+    //return 42
+    // current dir is <your proj>/app, so it's likely that all your git repo files are in the dir
+    // above.
+    ext.repo = Grgit.open(project.file('..'))
+
+    return ext.repo.log().first().id.substring(0, 7)
 }
 
 def getBugfenderApiKey() {
@@ -47,7 +67,7 @@ android {
         applicationId "info.nightscout.android"
         minSdkVersion 14
         targetSdkVersion 23
-        versionName project.properties['version']
+        versionName project.properties['version'] + "/" + gitCommitId()
         versionCode gitVersion()
         buildConfigField "String", "BUGFENDER_API_KEY", getBugfenderApiKey()
     }
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 6905665497f5f23e3f18498ffd4eff166fbbf795..8a381cf5a2df9916dad207c79da47fe2d8bde3cc 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java
@@ -15,7 +15,6 @@ import android.hardware.usb.UsbManager;
 import android.os.BatteryManager;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.SystemClock;
 import android.preference.PreferenceManager;
 import android.support.v4.app.TaskStackBuilder;
 import android.support.v4.content.LocalBroadcastManager;
@@ -305,7 +304,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
     }
 
     private void startCgmService() {
-        startCgmService(System.currentTimeMillis());
+        startCgmService(System.currentTimeMillis() + 1000);
     }
 
     private void startCgmService(long initialPoll) {
@@ -524,8 +523,6 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
     private class RefreshDisplayRunnable implements Runnable {
         @Override
         public void run() {
-            Log.d(TAG, "NOW " + new Date(System.currentTimeMillis()).toString());
-
             // UI elements - TODO do these need to be members?
             TextView textViewBg = (TextView) findViewById(R.id.textview_bg);
             TextView textViewBgTime = (TextView) findViewById(R.id.textview_bg_time);
@@ -630,11 +627,9 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
                 return;
             }
 
-            long nextPoll = pumpStatusData.getEventDate().getTime() + MedtronicCnlIntentService.POLL_GRACE_PERIOD_MS + MedtronicCnlIntentService.POLL_PERIOD_MS;
+            long nextPoll = pumpStatusData.getEventDate().getTime() + pumpStatusData.getPumpTimeOffset()
+                    + MedtronicCnlIntentService.POLL_GRACE_PERIOD_MS + MedtronicCnlIntentService.POLL_PERIOD_MS;
             startCgmService(nextPoll);
-            Log.d(TAG, "Local time " + new Date());
-            Log.d(TAG, "Last event was " + new Date(pumpStatusData.getEventDate().getTime()));
-            Log.d(TAG, "Next Poll at " + new Date(nextPoll).toString());
 
             // Delete invalid or old records from Realm
             // TODO - show an error message if the valid records haven't been uploaded
diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java
index d21499004116e0f974647842f09f01fcfbef576b..fcce820840ae73e067100047c66ad7b7c9f5f94d 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java
@@ -214,8 +214,10 @@ public class MedtronicCnlIntentService extends IntentService {
 
                     long pumpTime = cnlReader.getPumpTime().getTime();
                     long pumpOffset = pumpTime - System.currentTimeMillis();
+                    Log.d(TAG, "Time offset between pump and device: " + pumpOffset + " millis.");
 
                     // TODO - send ACTION to MainActivity to show offset between pump and uploader.
+                    pumpRecord.setPumpTimeOffset(pumpOffset);
                     pumpRecord.setPumpDate(new Date(pumpTime - pumpOffset));
                     cnlReader.getPumpStatus(pumpRecord, pumpOffset);
                     activePump.getPumpHistory().add(pumpRecord);
diff --git a/app/src/main/java/info/nightscout/android/model/medtronicNg/PumpStatusEvent.java b/app/src/main/java/info/nightscout/android/model/medtronicNg/PumpStatusEvent.java
index 496a85bacbf51966917c3c7463feed8a2d99ab43..ab95d50f6d346d506d3a6f03a992e53cfaa00804 100644
--- a/app/src/main/java/info/nightscout/android/model/medtronicNg/PumpStatusEvent.java
+++ b/app/src/main/java/info/nightscout/android/model/medtronicNg/PumpStatusEvent.java
@@ -3,6 +3,7 @@ package info.nightscout.android.model.medtronicNg;
 import java.util.Date;
 
 import io.realm.RealmObject;
+import io.realm.annotations.Ignore;
 import io.realm.annotations.Index;
 
 /**
@@ -38,6 +39,9 @@ public class PumpStatusEvent extends RealmObject {
     private boolean recentBolusWizard; // Whether a bolus wizard has been run recently
     private int bolusWizardBGL; // in mg/dL. 0 means no recent bolus wizard reading.
 
+    @Ignore
+    private long pumpTimeOffset; // millis the pump is ahead
+
     @Index
     private boolean uploaded = false;
 
@@ -249,6 +253,14 @@ public class PumpStatusEvent extends RealmObject {
         this.recentBolusWizard = recentBolusWizard;
     }
 
+    public long getPumpTimeOffset() {
+        return pumpTimeOffset;
+    }
+
+    public void setPumpTimeOffset(long pumpTimeOffset) {
+        this.pumpTimeOffset = pumpTimeOffset;
+    }
+
     public enum CGM_TREND {
         NONE,
         DOUBLE_UP,
diff --git a/app/src/main/java/info/nightscout/android/upload/nightscout/NightScoutApi.java b/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutApi.java
similarity index 100%
rename from app/src/main/java/info/nightscout/android/upload/nightscout/NightScoutApi.java
rename to app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutApi.java
diff --git a/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java b/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java
index 3fcefde12a486c2e2b5d71f48634cd60d1058fac..ff4bb71d4a17ffaa7260bcf21ae4c95baffb1527 100644
--- a/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java
+++ b/app/src/main/java/info/nightscout/android/upload/nightscout/NightscoutUploadIntentService.java
@@ -31,7 +31,6 @@ import java.util.regex.Pattern;
 
 import info.nightscout.android.R;
 import info.nightscout.android.medtronic.MainActivity;
-import info.nightscout.android.medtronic.service.MedtronicCnlIntentService;
 import info.nightscout.android.model.medtronicNg.PumpStatusEvent;
 import info.nightscout.android.upload.nightscout.serializer.EntriesSerializer;
 import io.realm.Realm;