diff --git a/.gitignore b/.gitignore
index 6394e0497a2d34e94fafd36e0f2b1bf3d80ce47d..eecad1a176964595d681f250ce28e89a630ab9b9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 .gradle
 app/build
+build/generated
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..97626ba45445dc9f3afa66e6a149914dc39e3df6
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="PROJECT" charset="UTF-8" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 39139a6c22fa46519bb48c647b0c8fd1b60b09dd..2ab1e27fe5ea65d84061efef84c22ecf1f2170ae 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -5,7 +5,7 @@
       <GradleProjectSettings>
         <option name="distributionType" value="LOCAL" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="gradleHome" value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8" />
+        <option name="gradleHome" value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10" />
         <option name="gradleJvm" value="1.8" />
         <option name="modules">
           <set>
@@ -13,6 +13,12 @@
             <option value="$PROJECT_DIR$/app" />
           </set>
         </option>
+        <option name="myModules">
+          <set>
+            <option value="$PROJECT_DIR$" />
+            <option value="$PROJECT_DIR$/app" />
+          </set>
+        </option>
       </GradleProjectSettings>
     </option>
   </component>
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f7b3a44868ac2205316394f265d244b59e4f592c
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="AndroidLintRtlHardcoded" enabled="false" level="WARNING" enabled_by_default="false" />
+  </profile>
+</component>
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3b312839bf2e939fea3ebdef15630a4b33e57caf
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,7 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="PROJECT_PROFILE" value="Project Default" />
+    <option name="USE_PROJECT_PROFILE" value="true" />
+    <version value="1.0" />
+  </settings>
+</component>
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 59281684716276bd9d3193f1c4eac006741346df..47a223cf29bf5f923de391b4b8539ec8c6fca6b1 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,5 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="AnalysisUIOptions">
+    <option name="SCOPE_TYPE" value="3" />
+  </component>
   <component name="AndroidConfiguredLogFilters">
     <filters>
       <filter>
@@ -21,7 +24,48 @@
     <option name="TOOL_WINDOW_CONFIGURED_FILTER" value="Show only selected application" />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="73c0df16-fbb3-4a39-b542-4a9ed61c734a" name="Default" comment="" />
+    <list default="true" id="73c0df16-fbb3-4a39-b542-4a9ed61c734a" name="Default" comment="Commit working version of Uploader before refactoring messages to be &quot;classier&quot;.">
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/BeginEHSMMessage.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessageHandler.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/EncryptionException.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/EndEHSMMessage.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicReceiveMessage.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicSendMessage.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusRequestMessage.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusResponseMessage.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeRequestMessage.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeResponseMessage.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/UnexpectedMessageException.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/libraries/logback_android_1_1_1_3.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/libraries/mongo_java_driver_3_0_2.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/libraries/physicaloidlibrary.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/libraries/slf4j_api_1_7_2.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageHandler.java" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.gitignore" afterPath="$PROJECT_DIR$/.gitignore" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/gradle.xml" afterPath="$PROJECT_DIR$/.idea/gradle.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/app.iml" afterPath="$PROJECT_DIR$/app/app.iml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/eula/Eula.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/eula/Eula.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java" afterPath="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/res/layout/adb.xml" afterPath="$PROJECT_DIR$/app/src/main/res/layout/adb.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/res/values/strings.xml" afterPath="$PROJECT_DIR$/app/src/main/res/values/strings.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app/src/main/res/xml/preferences.xml" afterPath="$PROJECT_DIR$/app/src/main/res/xml/preferences.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/build.gradle" afterPath="$PROJECT_DIR$/build.gradle" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/build/intermediates/dex-cache/cache.xml" afterPath="$PROJECT_DIR$/build/intermediates/dex-cache/cache.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties" afterPath="$PROJECT_DIR$/gradle/wrapper/gradle-wrapper.properties" />
+    </list>
     <ignored path="MedtronicUploader.iws" />
     <ignored path=".idea/workspace.xml" />
     <ignored path="$PROJECT_DIR$/build/classes/" />
@@ -48,12 +92,12 @@
     <favorites_list name="MedtronicUploader" />
   </component>
   <component name="FileEditorManager">
-    <leaf>
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
       <file leaf-file-name="DexcomG4Activity.java" pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java">
           <provider selected="true" editor-type-id="text-editor">
             <state vertical-scroll-proportion="0.0">
-              <caret line="963" column="0" selection-start-line="963" selection-start-column="0" selection-end-line="963" selection-end-column="0" />
+              <caret line="524" column="0" selection-start-line="524" selection-start-column="0" selection-end-line="524" selection-end-column="0" />
               <folding>
                 <element signature="imports" expanded="true" />
               </folding>
@@ -61,74 +105,42 @@
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="MedtronicCNLService.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java">
+      <file leaf-file-name="UploadHelper.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0">
-              <caret line="115" column="33" selection-start-line="115" selection-start-column="33" selection-end-line="115" selection-end-column="33" />
+            <state vertical-scroll-proportion="-1.1111112">
+              <caret line="2" column="7" selection-start-line="2" selection-start-column="7" selection-end-line="2" selection-end-column="7" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="MedtronicCNLReader.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0">
-              <caret line="117" column="8" selection-start-line="117" selection-start-column="8" selection-end-line="117" selection-end-column="8" />
-              <folding>
-                <element signature="imports" expanded="true" />
-                <element signature="e#1312#1313#0" expanded="true" />
-                <element signature="e#1344#1345#0" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="ContourNextLinkMessage.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java">
+      <file leaf-file-name="MedtronicCNLService.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java">
           <provider selected="true" editor-type-id="text-editor">
             <state vertical-scroll-proportion="0.0">
-              <caret line="8" column="32" selection-start-line="8" selection-start-column="32" selection-end-line="8" selection-end-column="32" />
+              <caret line="105" column="0" selection-start-line="105" selection-start-column="0" selection-end-line="105" selection-end-column="0" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="ContourNextLinkBinaryMessage.java" pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java">
-          <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.28169015">
-              <caret line="12" column="38" selection-start-line="12" selection-start-column="38" selection-end-line="12" selection-end-column="38" />
-              <folding>
-                <element signature="imports" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="MedtronicMessage.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java">
+      <file leaf-file-name="MedtronicCNLSession.java" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java">
           <provider selected="true" editor-type-id="text-editor">
             <state vertical-scroll-proportion="0.0">
-              <caret line="52" column="31" selection-start-line="52" selection-start-column="31" selection-end-line="52" selection-end-column="31" />
-              <folding>
-                <element signature="imports" expanded="true" />
-                <element signature="e#632#633#0" expanded="true" />
-                <element signature="e#684#685#0" expanded="true" />
-              </folding>
+              <caret line="4" column="0" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="ChannelNegotiateMessage.java" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java">
+      <file leaf-file-name="MedtronicCNLReader.java" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0">
-              <caret line="21" column="34" selection-start-line="21" selection-start-column="34" selection-end-line="21" selection-end-column="34" />
-              <folding>
-                <element signature="imports" expanded="true" />
-              </folding>
+            <state vertical-scroll-proportion="0.33802816">
+              <caret line="189" column="91" selection-start-line="189" selection-start-column="91" selection-end-line="189" selection-end-column="91" />
+              <folding />
             </state>
           </provider>
         </entry>
@@ -143,6 +155,9 @@
       </list>
     </option>
   </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
   <component name="GradleLocalSettings">
     <option name="availableProjects">
       <map>
@@ -173,6 +188,11 @@
         <entry key="$PROJECT_DIR$">
           <value>
             <list>
+              <ExternalTaskPojo>
+                <option name="description" value="Displays all buildscript dependencies declared in root project 'MedtronicUploader'." />
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="buildEnvironment" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="description" value="Displays the components produced by root project 'MedtronicUploader'. [incubating]" />
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
@@ -313,6 +333,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="compileDebugAndroidTestRenderscript" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="compileDebugAndroidTestShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="compileDebugAndroidTestSources" />
@@ -329,6 +353,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="compileDebugRenderscript" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="compileDebugShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="compileDebugSources" />
@@ -361,6 +389,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="compileReleaseRenderscript" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="compileReleaseShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="compileReleaseSources" />
@@ -458,6 +490,26 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="generateReleaseSources" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="incrementalDebugAndroidTestJavaCompilationSafeguard" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="incrementalDebugJavaCompilationSafeguard" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="incrementalDebugUnitTestJavaCompilationSafeguard" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="incrementalReleaseJavaCompilationSafeguard" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="incrementalReleaseUnitTestJavaCompilationSafeguard" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="description" value="Installs the Debug build." />
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
@@ -508,6 +560,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="mergeDebugAndroidTestResources" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="mergeDebugAndroidTestShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="mergeDebugAssets" />
@@ -520,6 +576,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="mergeDebugResources" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="mergeDebugShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="mergeReleaseAssets" />
@@ -532,6 +592,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="mergeReleaseResources" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="mergeReleaseShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="description" value="Creates a version of android.jar that's suitable for unit tests." />
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
@@ -565,6 +629,18 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="preDebugUnitTestBuild" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="prePackageMarkerForDebug" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="prePackageMarkerForDebugAndroidTest" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
+                <option name="name" value="prePackageMarkerForRelease" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$" />
                 <option name="name" value="preReleaseBuild" />
@@ -787,6 +863,11 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="buildDependents" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="description" value="Displays all buildscript dependencies declared in project ':app'." />
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="buildEnvironment" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="description" value="Assembles and tests this project and all projects it depends on." />
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
@@ -830,6 +911,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="compileDebugAndroidTestRenderscript" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="compileDebugAndroidTestShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="compileDebugAndroidTestSources" />
@@ -846,6 +931,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="compileDebugRenderscript" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="compileDebugShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="compileDebugSources" />
@@ -878,6 +967,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="compileReleaseRenderscript" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="compileReleaseShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="compileReleaseSources" />
@@ -995,6 +1088,26 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="help" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="incrementalDebugAndroidTestJavaCompilationSafeguard" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="incrementalDebugJavaCompilationSafeguard" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="incrementalDebugUnitTestJavaCompilationSafeguard" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="incrementalReleaseJavaCompilationSafeguard" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="incrementalReleaseUnitTestJavaCompilationSafeguard" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="description" value="Installs the Debug build." />
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
@@ -1045,6 +1158,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="mergeDebugAndroidTestResources" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="mergeDebugAndroidTestShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="mergeDebugAssets" />
@@ -1057,6 +1174,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="mergeDebugResources" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="mergeDebugShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="mergeReleaseAssets" />
@@ -1069,6 +1190,10 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="mergeReleaseResources" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="mergeReleaseShaders" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="description" value="Creates a version of android.jar that's suitable for unit tests." />
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
@@ -1107,6 +1232,18 @@
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="preDebugUnitTestBuild" />
               </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="prePackageMarkerForDebug" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="prePackageMarkerForDebugAndroidTest" />
+              </ExternalTaskPojo>
+              <ExternalTaskPojo>
+                <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
+                <option name="name" value="prePackageMarkerForRelease" />
+              </ExternalTaskPojo>
               <ExternalTaskPojo>
                 <option name="linkedExternalProjectPath" value="$PROJECT_DIR$/app" />
                 <option name="name" value="preReleaseBuild" />
@@ -1298,7 +1435,7 @@
     </option>
     <option name="modificationStamps">
       <map>
-        <entry key="$PROJECT_DIR$" value="4376083200000" />
+        <entry key="$PROJECT_DIR$" value="4379299520000" />
       </map>
     </option>
     <option name="projectBuildClasspath">
@@ -1313,93 +1450,76 @@
                       <ExternalModuleBuildClasspathPojo>
                         <option name="entries">
                           <list>
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle/1.5.0/gradle-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle/1.5.0/gradle-1.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-core/1.5.0/gradle-core-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-core/1.5.0/gradle-core-1.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle/2.1.0/gradle-2.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-core/2.1.0/gradle-core-2.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/jacoco/org.jacoco.core/0.7.4.201502262128/org.jacoco.core-0.7.4.201502262128-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/jacoco/org.jacoco.core/0.7.4.201502262128/org.jacoco.core-0.7.4.201502262128.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/transform-api/1.5.0/transform-api-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/transform-api/1.5.0/transform-api-1.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/compilerCommon/1.0-rc5/compilerCommon-1.0-rc5.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-commons/5.0.3/asm-commons-5.0.3-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-commons/5.0.3/asm-commons-5.0.3.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-api/2.1.0/gradle-api-2.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint/25.1.0/lint-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/compilerCommon/2.1.0/compilerCommon-2.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm/5.0.3/asm-5.0.3-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm/5.0.3/asm-5.0.3.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/proguard/proguard-gradle/5.2.1/proguard-gradle-5.2.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/proguard/proguard-gradle/5.2.1/proguard-gradle-5.2.1.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint/24.5.0/lint-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint/24.5.0/lint-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder/1.5.0/builder-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder/1.5.0/builder-1.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/transform-api/2.0.0-deprecated-use-gradle-api/transform-api-2.0.0-deprecated-use-gradle-api.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder/2.1.0/builder-2.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-debug-all/5.0.1/asm-debug-all-5.0.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-debug-all/5.0.1/asm-debug-all-5.0.1.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-tree/5.0.3/asm-tree-5.0.3-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-tree/5.0.3/asm-tree-5.0.3.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/guava/guava/17.0/guava-17.0-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/guava/guava/17.0/guava-17.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/annotations/24.5.0/annotations-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/annotations/24.5.0/annotations-24.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/annotations/25.1.0/annotations-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-checks/25.1.0/lint-checks-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/tunnelvisionlabs/antlr4/4.5/antlr4-4.5.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/commons-io/commons-io/2.4/commons-io-2.4-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/commons-io/commons-io/2.4/commons-io-2.4.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/baseLibrary/1.0-rc5/baseLibrary-1.0-rc5-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/baseLibrary/1.0-rc5/baseLibrary-1.0-rc5.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/baseLibrary/2.1.0/baseLibrary-2.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/proguard/proguard-base/5.2.1/proguard-base-5.2.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/proguard/proguard-base/5.2.1/proguard-base-5.2.1.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-checks/24.5.0/lint-checks-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-checks/24.5.0/lint-checks-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdk-common/24.5.0/sdk-common-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdk-common/24.5.0/sdk-common-24.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-model/2.1.0/builder-model-2.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/common/25.1.0/common-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/ddms/ddmlib/25.1.0/ddmlib-25.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-model/1.5.0/builder-model-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-model/1.5.0/builder-model-1.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-tree/5.0.3/asm-tree-5.0.3-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-tree/5.0.3/asm-tree-5.0.3.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/common/24.5.0/common-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/common/24.5.0/common-24.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdklib/25.1.0/sdklib-25.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/squareup/javawriter/2.5.0/javawriter-2.5.0-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/squareup/javawriter/2.5.0/javawriter-2.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdklib/24.5.0/sdklib-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdklib/24.5.0/sdklib-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-test-api/1.5.0/builder-test-api-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-test-api/1.5.0/builder-test-api-1.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm/5.0.3/asm-5.0.3-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm/5.0.3/asm-5.0.3.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jack/jack-api/0.9.0/jack-api-0.9.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jack/jack-api/0.9.0/jack-api-0.9.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/ddms/ddmlib/24.5.0/ddmlib-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/ddms/ddmlib/24.5.0/ddmlib-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/manifest-merger/24.5.0/manifest-merger-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/manifest-merger/24.5.0/manifest-merger-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jill/jill-api/0.9.0/jill-api-0.9.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jill/jill-api/0.9.0/jill-api-0.9.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-test-api/2.1.0/builder-test-api-2.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdk-common/25.1.0/sdk-common-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/manifest-merger/25.1.0/manifest-merger-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jack/jack-api/0.10.0/jack-api-0.10.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jill/jill-api/0.10.0/jill-api-0.10.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-api/25.1.0/lint-api-25.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/tunnelvisionlabs/antlr4-runtime/4.5/antlr4-runtime-4.5.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/tunnelvisionlabs/antlr4-annotations/4.5/antlr4-annotations-4.5.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/antlr/ST4/4.0.8/ST4-4.0.8.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-api/24.5.0/lint-api-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-api/24.5.0/lint-api-24.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/repository/25.1.0/repository-25.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpmime/4.1/httpmime-4.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpmime/4.1/httpmime-4.1.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/layoutlib/layoutlib-api/24.5.0/layoutlib-api-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/layoutlib/layoutlib-api/24.5.0/layoutlib-api-24.5.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/code/gson/gson/2.2.4/gson-2.2.4-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/dvlib/24.5.0/dvlib-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/dvlib/24.5.0/dvlib-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/abego/treelayout/org.abego.treelayout.core/1.0.1/org.abego.treelayout.core-1.0.1.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/dvlib/25.1.0/dvlib-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/layoutlib/layoutlib-api/25.1.0/layoutlib-api-25.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/external/lombok/lombok-ast/0.2.3/lombok-ast-0.2.3-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/external/lombok/lombok-ast/0.2.3/lombok-ast-0.2.3.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/abego/treelayout/org.abego.treelayout.core/1.0.1/org.abego.treelayout.core-1.0.1.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpcore/4.1/httpcore-4.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpcore/4.1/httpcore-4.1.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-sources.jar" />
@@ -1419,93 +1539,76 @@
                       <ExternalModuleBuildClasspathPojo>
                         <option name="entries">
                           <list>
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle/1.5.0/gradle-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle/1.5.0/gradle-1.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-core/1.5.0/gradle-core-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-core/1.5.0/gradle-core-1.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle/2.1.0/gradle-2.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-core/2.1.0/gradle-core-2.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/jacoco/org.jacoco.core/0.7.4.201502262128/org.jacoco.core-0.7.4.201502262128-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/jacoco/org.jacoco.core/0.7.4.201502262128/org.jacoco.core-0.7.4.201502262128.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/transform-api/1.5.0/transform-api-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/transform-api/1.5.0/transform-api-1.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/compilerCommon/1.0-rc5/compilerCommon-1.0-rc5.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-commons/5.0.3/asm-commons-5.0.3-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-commons/5.0.3/asm-commons-5.0.3.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/gradle-api/2.1.0/gradle-api-2.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint/25.1.0/lint-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/compilerCommon/2.1.0/compilerCommon-2.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm/5.0.3/asm-5.0.3-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm/5.0.3/asm-5.0.3.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/proguard/proguard-gradle/5.2.1/proguard-gradle-5.2.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/proguard/proguard-gradle/5.2.1/proguard-gradle-5.2.1.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint/24.5.0/lint-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint/24.5.0/lint-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder/1.5.0/builder-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder/1.5.0/builder-1.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/transform-api/2.0.0-deprecated-use-gradle-api/transform-api-2.0.0-deprecated-use-gradle-api.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder/2.1.0/builder-2.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-debug-all/5.0.1/asm-debug-all-5.0.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-debug-all/5.0.1/asm-debug-all-5.0.1.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-tree/5.0.3/asm-tree-5.0.3-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-tree/5.0.3/asm-tree-5.0.3.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/guava/guava/17.0/guava-17.0-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/guava/guava/17.0/guava-17.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/annotations/24.5.0/annotations-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/annotations/24.5.0/annotations-24.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/annotations/25.1.0/annotations-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-checks/25.1.0/lint-checks-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/tunnelvisionlabs/antlr4/4.5/antlr4-4.5.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/commons-io/commons-io/2.4/commons-io-2.4-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/commons-io/commons-io/2.4/commons-io-2.4.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/baseLibrary/1.0-rc5/baseLibrary-1.0-rc5-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/baseLibrary/1.0-rc5/baseLibrary-1.0-rc5.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/databinding/baseLibrary/2.1.0/baseLibrary-2.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/proguard/proguard-base/5.2.1/proguard-base-5.2.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/proguard/proguard-base/5.2.1/proguard-base-5.2.1.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-checks/24.5.0/lint-checks-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-checks/24.5.0/lint-checks-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdk-common/24.5.0/sdk-common-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdk-common/24.5.0/sdk-common-24.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-model/2.1.0/builder-model-2.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/common/25.1.0/common-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/ddms/ddmlib/25.1.0/ddmlib-25.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-model/1.5.0/builder-model-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-model/1.5.0/builder-model-1.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-tree/5.0.3/asm-tree-5.0.3-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-tree/5.0.3/asm-tree-5.0.3.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/common/24.5.0/common-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/common/24.5.0/common-24.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdklib/25.1.0/sdklib-25.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/squareup/javawriter/2.5.0/javawriter-2.5.0-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/squareup/javawriter/2.5.0/javawriter-2.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdklib/24.5.0/sdklib-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdklib/24.5.0/sdklib-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-test-api/1.5.0/builder-test-api-1.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-test-api/1.5.0/builder-test-api-1.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm/5.0.3/asm-5.0.3-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm/5.0.3/asm-5.0.3.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jack/jack-api/0.9.0/jack-api-0.9.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jack/jack-api/0.9.0/jack-api-0.9.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/ddms/ddmlib/24.5.0/ddmlib-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/ddms/ddmlib/24.5.0/ddmlib-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/manifest-merger/24.5.0/manifest-merger-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/manifest-merger/24.5.0/manifest-merger-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jill/jill-api/0.9.0/jill-api-0.9.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jill/jill-api/0.9.0/jill-api-0.9.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/builder-test-api/2.1.0/builder-test-api-2.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/sdk-common/25.1.0/sdk-common-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/build/manifest-merger/25.1.0/manifest-merger-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jack/jack-api/0.10.0/jack-api-0.10.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/jill/jill-api/0.10.0/jill-api-0.10.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-api/25.1.0/lint-api-25.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/tunnelvisionlabs/antlr4-runtime/4.5/antlr4-runtime-4.5.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/tunnelvisionlabs/antlr4-annotations/4.5/antlr4-annotations-4.5.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/antlr/ST4/4.0.8/ST4-4.0.8.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-api/24.5.0/lint-api-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/lint/lint-api/24.5.0/lint-api-24.5.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0-sources.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/repository/25.1.0/repository-25.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpmime/4.1/httpmime-4.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpmime/4.1/httpmime-4.1.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/layoutlib/layoutlib-api/24.5.0/layoutlib-api-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/layoutlib/layoutlib-api/24.5.0/layoutlib-api-24.5.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/code/gson/gson/2.2.4/gson-2.2.4-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/dvlib/24.5.0/dvlib-24.5.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/dvlib/24.5.0/dvlib-24.5.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0-sources.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/net/sf/kxml/kxml2/2.3.0/kxml2-2.3.0.jar" />
-                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/abego/treelayout/org.abego.treelayout.core/1.0.1/org.abego.treelayout.core-1.0.1.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/dvlib/25.1.0/dvlib-25.1.0.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/layoutlib/layoutlib-api/25.1.0/layoutlib-api-25.1.0.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/external/lombok/lombok-ast/0.2.3/lombok-ast-0.2.3-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/com/android/tools/external/lombok/lombok-ast/0.2.3/lombok-ast-0.2.3.jar" />
+                            <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/abego/treelayout/org.abego.treelayout.core/1.0.1/org.abego.treelayout.core-1.0.1.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpcore/4.1/httpcore-4.1-sources.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/org/apache/httpcomponents/httpcore/4.1/httpcore-4.1.jar" />
                             <option value="$APPLICATION_HOME_DIR$/gradle/m2repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-sources.jar" />
@@ -1529,119 +1632,64 @@
               <option name="name" value="app" />
               <option name="projectBuildClasspath">
                 <list>
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/announce" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/antlr" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/base-services" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/base-services-groovy" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/build-comparison" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/build-init" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/cli" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/code-quality" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/core" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/dependency-management" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/diagnostics" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/ear" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/ide" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/ide-native" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/internal-integ-testing" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/internal-testing" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/ivy" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/jacoco" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/javascript" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/jetty" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/language-groovy" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/language-java" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/language-jvm" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/language-native" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/language-scala" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/launcher" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/maven" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/messaging" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/model-core" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/model-groovy" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/native" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/open-api" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/osgi" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/platform-base" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/platform-jvm" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/platform-native" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/platform-play" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/plugin-development" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/plugin-use" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/plugins" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/publish" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/reporting" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/resources" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/resources-http" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/resources-s3" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/resources-sftp" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/scala" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/signing" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/sonar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/test-kit" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/testing-native" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/tooling-api" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/tooling-api-builders" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/ui" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/src/wrapper" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/ant-1.9.3.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/ant-launcher-1.9.3.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-base-services-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-base-services-groovy-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-cli-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-core-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-docs-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-launcher-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-messaging-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-model-core-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-model-groovy-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-native-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-open-api-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-resources-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-tooling-api-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-ui-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/gradle-wrapper-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/groovy-all-2.4.4.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-announce-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-antlr-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-build-comparison-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-build-init-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-code-quality-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-dependency-management-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-diagnostics-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-ear-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-ide-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-ide-native-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-ivy-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-jacoco-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-javascript-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-jetty-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-language-groovy-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-language-java-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-language-jvm-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-language-native-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-language-scala-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-maven-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-osgi-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-platform-base-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-platform-jvm-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-platform-native-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-platform-play-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-plugin-development-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-plugin-use-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-plugins-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-publish-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-reporting-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-resources-http-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-resources-s3-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-resources-sftp-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-scala-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-signing-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-sonar-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-test-kit-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-testing-native-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/gradle-tooling-api-builders-2.8.jar" />
-                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.8/lib/plugins/ivy-2.2.0.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/ant-1.9.3.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/ant-launcher-1.9.3.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-base-services-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-base-services-groovy-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-cli-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-core-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-docs-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-launcher-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-messaging-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-model-core-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-model-groovy-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-native-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-open-api-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-resources-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-tooling-api-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-ui-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/gradle-wrapper-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/groovy-all-2.4.4.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-announce-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-antlr-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-build-comparison-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-build-init-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-code-quality-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-dependency-management-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-diagnostics-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-ear-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-ide-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-ide-native-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-ivy-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-jacoco-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-javascript-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-jetty-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-language-groovy-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-language-java-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-language-jvm-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-language-native-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-language-scala-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-maven-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-osgi-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-platform-base-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-platform-jvm-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-platform-native-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-platform-play-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-plugin-development-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-plugin-use-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-plugins-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-publish-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-reporting-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-resources-http-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-resources-s3-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-resources-sftp-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-scala-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-signing-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-sonar-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-test-kit-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-testing-native-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/gradle-tooling-api-builders-2.10.jar" />
+                  <option value="$APPLICATION_HOME_DIR$/gradle/gradle-2.10/lib/plugins/ivy-2.2.0.jar" />
                   <option value="$PROJECT_DIR$/buildSrc/src/main/java" />
                   <option value="$PROJECT_DIR$/buildSrc/src/main/groovy" />
                 </list>
@@ -1658,10 +1706,7 @@
   <component name="IdeDocumentHistory">
     <option name="CHANGED_PATHS">
       <list>
-        <option value="$PROJECT_DIR$/app/src/main/res/xml/device_filter.xml" />
-        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/widget/CGMWidgetUpdater.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/widget/CGMWidget.java" />
-        <option value="$PROJECT_DIR$/app/src/main/res/values/strings.xml" />
         <option value="$PROJECT_DIR$/app/src/main/assets/logback.xml" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCGMService.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLService.java" />
@@ -1674,23 +1719,44 @@
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/USBPower.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/UsbHidDriver.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/TestService.java" />
-        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/service/AbstractService.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/service/ServiceManager.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/UsbDriver.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/Message.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChecksumException.java" />
-        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/BayerBinaryMessage.java" />
-        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java" />
-        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java" />
-        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" />
-        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/BayerBinaryMessageHandler.java" />
-        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" />
-        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageHandler.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/BaseMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageHandler.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessageHandler.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java" />
         <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/EncryptionException.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/BeginEHSMMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeRequestMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeResponseMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusRequestMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusResponseMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicSendMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/EndEHSMMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicReceiveMessage.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/UnexpectedMessageException.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java" />
+        <option value="$PROJECT_DIR$/app/src/main/res/layout/adb.xml" />
+        <option value="$PROJECT_DIR$/app/src/main/res/values/strings.xml" />
+        <option value="$PROJECT_DIR$/app/src/main/res/xml/preferences.xml" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/eula/Eula.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java" />
+        <option value="$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java" />
       </list>
     </option>
   </component>
@@ -1701,15 +1767,31 @@
       </MavenGeneralSettings>
     </option>
   </component>
-  <component name="NamedScopeManager">
-    <order />
-  </component>
   <component name="ProjectFrameBounds">
     <option name="y" value="23" />
     <option name="width" value="1400" />
     <option name="height" value="783" />
   </component>
-  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
+  <component name="ProjectInspectionProfilesVisibleTreeState">
+    <entry key="Project Default">
+      <profile-state>
+        <expanded-state>
+          <State>
+            <id />
+          </State>
+          <State>
+            <id>Android &gt; Lint &gt; Correctness</id>
+          </State>
+        </expanded-state>
+        <selected-state>
+          <State>
+            <id>AndroidLintSimpleDateFormat</id>
+          </State>
+        </selected-state>
+      </profile-state>
+    </entry>
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true">
     <OptionsSetting value="true" id="Add" />
     <OptionsSetting value="true" id="Remove" />
     <OptionsSetting value="true" id="Checkout" />
@@ -1730,8 +1812,12 @@
       <autoscrollToSource />
       <autoscrollFromSource />
       <sortByType />
+      <manualOrder />
+      <foldersAlwaysOnTop value="true" />
     </navigator>
     <panes>
+      <pane id="Scratches" />
+      <pane id="ProjectPane" />
       <pane id="AndroidView">
         <subPane>
           <PATH>
@@ -1744,20 +1830,6 @@
               <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidBuildScriptsGroupNode" />
             </PATH_ELEMENT>
           </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="MedtronicUploader" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="app" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="assets" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" />
-            </PATH_ELEMENT>
-          </PATH>
           <PATH>
             <PATH_ELEMENT>
               <option name="myItemId" value="MedtronicUploader" />
@@ -1836,16 +1908,12 @@
               <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="java" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="android" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" />
+              <option name="myItemId" value="res" />
+              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderNode" />
             </PATH_ELEMENT>
             <PATH_ELEMENT>
-              <option name="myItemId" value="widget" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+              <option name="myItemId" value="drawable" />
+              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidResFolderTypeNode" />
             </PATH_ELEMENT>
           </PATH>
           <PATH>
@@ -1857,18 +1925,6 @@
               <option name="myItemId" value="app" />
               <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="java" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="android" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="utils" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
           </PATH>
           <PATH>
             <PATH_ELEMENT>
@@ -1887,10 +1943,6 @@
               <option name="myItemId" value="android" />
               <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" />
             </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="USB" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
           </PATH>
           <PATH>
             <PATH_ELEMENT>
@@ -2032,28 +2084,6 @@
               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="MedtronicUploader" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="app" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="java" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="android" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="eula" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
           <PATH>
             <PATH_ELEMENT>
               <option name="myItemId" value="MedtronicUploader" />
@@ -2076,67 +2106,26 @@
               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="MedtronicUploader" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="app" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="java" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidSourceTypeNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="android" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidPsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="dexcom" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="USB" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="MedtronicUploader" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="app" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidModuleNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="manifests" />
-              <option name="myItemType" value="com.android.tools.idea.navigator.nodes.AndroidManifestsGroupNode" />
-            </PATH_ELEMENT>
-          </PATH>
         </subPane>
       </pane>
       <pane id="Scope" />
-      <pane id="ProjectPane" />
       <pane id="PackagesPane" />
-      <pane id="Scratches" />
     </panes>
   </component>
   <component name="PropertiesComponent">
     <property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
     <property name="settings.editor.splitter.proportion" value="0.2" />
     <property name="recentsLimit" value="5" />
-    <property name="android.project.structure.last.selected" value="SDK Location" />
+    <property name="android.project.structure.last.selected" value="Project" />
     <property name="android.project.structure.proportion" value="0.15" />
-    <property name="FullScreen" value="false" />
-    <property name="ANDROID_EXTENDED_DEVICE_CHOOSER_SERIALS" value="192.168.0.115:5555" />
+    <property name="ANDROID_EXTENDED_DEVICE_CHOOSER_SERIALS" value="d1cd921" />
     <property name="ANDROID_EXTENDED_DEVICE_CHOOSER_AVD" value="Nexus_5_API_23_x86" />
     <property name="restartRequiresConfirmation" value="true" />
     <property name="OverrideImplement.combined" value="true" />
     <property name="OverrideImplement.overriding.sorted" value="false" />
-    <property name="SearchEverywhereHistoryKey" value="&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java" />
+    <property name="SearchEverywhereHistoryKey" value="adb&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/res/layout/adb.xml&#10;string&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/res/values/strings.xml&#10;640g&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java&#10;e&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java&#10;egv&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java&#10;medtronicme&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java&#10;chann&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java&#10;binary&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java&#10;nego&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java&#10;commandme&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java&#10;contourne&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java&#10;con&#9;FILE&#9;file:///Users/lgoedhart/StudioProjects/MedtronicUploader/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java" />
+    <property name="last_opened_file_path" value="$USER_HOME$/Desktop" />
+    <property name="device.picker.selection" value="Nexus_5_API_23_x86" />
   </component>
   <component name="RecentsManager">
     <key name="CreateClassDialog.RecentsKey">
@@ -2151,6 +2140,7 @@
       <recent name="com.nightscout.android" />
     </key>
     <key name="CopyClassDialog.RECENTS_KEY">
+      <recent name="com.nightscout.android.medtronic.message" />
       <recent name="com.nightscout.android.USB" />
       <recent name="com.nightscout.android.medtronic" />
     </key>
@@ -2169,10 +2159,23 @@
       <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
       <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
       <option name="FORCE_STOP_RUNNING_APP" value="true" />
+      <option name="DEBUGGER_TYPE" value="Java" />
       <option name="USE_LAST_SELECTED_DEVICE" value="false" />
       <option name="PREFERRED_AVD" value="" />
       <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
       <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
+      <Native>
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+      </Native>
+      <Java />
+      <Hybrid>
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+      </Hybrid>
+      <Profilers>
+        <option name="GAPID_DISABLE_PCS" value="false" />
+      </Profilers>
       <option name="DEEP_LINK" value="" />
       <option name="ACTIVITY_CLASS" value="" />
       <method />
@@ -2191,10 +2194,23 @@
       <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
       <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
       <option name="FORCE_STOP_RUNNING_APP" value="true" />
+      <option name="DEBUGGER_TYPE" value="Java" />
       <option name="USE_LAST_SELECTED_DEVICE" value="false" />
       <option name="PREFERRED_AVD" value="" />
       <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
       <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
+      <Native>
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+      </Native>
+      <Java />
+      <Hybrid>
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+      </Hybrid>
+      <Profilers>
+        <option name="GAPID_DISABLE_PCS" value="false" />
+      </Profilers>
       <method />
     </configuration>
     <configuration default="true" type="Application" factoryName="Application">
@@ -2236,11 +2252,48 @@
         <option name="Android.Gradle.BeforeRunTask" enabled="true" />
       </method>
     </configuration>
+    <configuration default="true" type="JUnitTestDiscovery" factoryName="JUnit Test Discovery" changeList="All">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <module name="" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="singleModule" />
+      </option>
+      <envs />
+      <patterns />
+      <method />
+    </configuration>
     <configuration default="true" type="JarApplication" factoryName="JAR Application">
       <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
       <envs />
       <method />
     </configuration>
+    <configuration default="true" type="Java Scratch" factoryName="Java Scratch">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <option name="SCRATCH_FILE_ID" value="0" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="" />
+      <envs />
+      <method />
+    </configuration>
     <configuration default="true" type="Remote" factoryName="Remote">
       <option name="USE_SOCKET_TRANSPORT" value="true" />
       <option name="SERVER_MODE" value="false" />
@@ -2277,7 +2330,35 @@
       <listeners />
       <method />
     </configuration>
-    <configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android Application">
+    <configuration default="true" type="TestNGTestDiscovery" factoryName="TestNG Test Discovery" changeList="All">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <module name="" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="SUITE_NAME" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="GROUP_NAME" />
+      <option name="TEST_OBJECT" value="CLASS" />
+      <option name="VM_PARAMETERS" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" />
+      <option name="OUTPUT_DIRECTORY" />
+      <option name="ANNOTATION_TYPE" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="singleModule" />
+      </option>
+      <option name="USE_DEFAULT_REPORTERS" value="false" />
+      <option name="PROPERTIES_FILE" />
+      <envs />
+      <properties />
+      <listeners />
+      <method />
+    </configuration>
+    <configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android Application" activateToolWindowBeforeRun="false">
       <module name="app" />
       <option name="DEPLOY" value="true" />
       <option name="ARTIFACT_NAME" value="" />
@@ -2290,10 +2371,23 @@
       <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
       <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
       <option name="FORCE_STOP_RUNNING_APP" value="true" />
+      <option name="DEBUGGER_TYPE" value="Java" />
       <option name="USE_LAST_SELECTED_DEVICE" value="true" />
       <option name="PREFERRED_AVD" value="" />
       <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
       <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
+      <Native>
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+      </Native>
+      <Java />
+      <Hybrid>
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+      </Hybrid>
+      <Profilers>
+        <option name="GAPID_DISABLE_PCS" value="false" />
+      </Profilers>
       <option name="DEEP_LINK" value="" />
       <option name="ACTIVITY_CLASS" value="" />
       <method />
@@ -2315,6 +2409,9 @@
     </configuration>
   </component>
   <component name="ShelveChangesManager" show_recycled="false" />
+  <component name="StructureViewFactory">
+    <option name="ACTIVE_ACTIONS" value=",SHOW_INHERITED,ALPHA_COMPARATOR" />
+  </component>
   <component name="SvnConfiguration">
     <configuration />
   </component>
@@ -2325,6 +2422,13 @@
       <option name="number" value="Default" />
       <updated>1458694399637</updated>
     </task>
+    <task id="LOCAL-00001" summary="Commit working version of Uploader before refactoring messages to be &quot;classier&quot;.">
+      <created>1458970961158</created>
+      <option name="number" value="00001" />
+      <option name="project" value="LOCAL" />
+      <updated>1458970961158</updated>
+    </task>
+    <option name="localTasksCounter" value="2" />
     <servers />
   </component>
   <component name="TodoView">
@@ -2340,38 +2444,41 @@
     <frame x="0" y="23" width="1400" height="783" extended-state="0" />
     <editor active="true" />
     <layout>
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3297546" sideWeight="0.4970545" order="6" side_tool="false" content_ui="tabs" />
-      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3297546" sideWeight="0.49116346" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Build Variants" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2496318" sideWeight="0.50800914" order="2" side_tool="true" content_ui="tabs" />
-      <window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.7960123" sideWeight="0.51178205" order="7" side_tool="true" content_ui="tabs" />
-      <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Android Monitor" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.5667167" sideWeight="0.48821798" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32833582" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32833582" sideWeight="0.49263623" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Captures" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Gradle Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
-      <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2496318" sideWeight="0.49199083" order="0" side_tool="false" content_ui="combo" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.27286357" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2496318" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Android Model" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
-      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.5217391" sideWeight="0.4867452" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
-      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
-      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
-      <window_info id="Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3298969" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32833582" sideWeight="0.4970545" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32833582" sideWeight="0.48821798" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Build Variants" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.2496318" sideWeight="0.50800914" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.70464766" sideWeight="0.52061856" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Android Monitor" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.70464766" sideWeight="0.47938144" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3298969" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3298351" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32833582" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.47226387" sideWeight="0.4867452" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Captures" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Gradle Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2496318" sideWeight="0.49199083" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.60569715" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Gradle" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.2496318" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Android Model" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.42578712" sideWeight="0.47864506" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.3988006" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
     </layout>
   </component>
+  <component name="UpdateCopyrightCheckinHandler">
+    <option name="UPDATE_COPYRIGHT" value="true" />
+  </component>
   <component name="Vcs.Log.UiProperties">
     <option name="RECENTLY_FILTERED_USER_GROUPS">
       <collection />
@@ -2383,453 +2490,422 @@
   <component name="VcsContentAnnotationSettings">
     <option name="myLimit" value="2678400000" />
   </component>
+  <component name="VcsManagerConfiguration">
+    <option name="CHECK_CODE_CLEANUP_BEFORE_PROJECT_COMMIT" value="true" />
+    <MESSAGE value="Commit working version of Uploader before refactoring messages to be &quot;classier&quot;." />
+    <option name="LAST_COMMIT_MESSAGE" value="Commit working version of Uploader before refactoring messages to be &quot;classier&quot;." />
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" />
+    <option name="REARRANGE_BEFORE_PROJECT_COMMIT" value="true" />
+  </component>
   <component name="XDebuggerManager">
     <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint enabled="true" type="java-line">
+          <url>file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java</url>
+          <line>238</line>
+          <properties />
+          <option name="timeStamp" value="66" />
+        </line-breakpoint>
+      </breakpoints>
       <breakpoints-dialog>
         <breakpoints-dialog />
       </breakpoints-dialog>
-      <option name="time" value="26" />
+      <option name="time" value="73" />
     </breakpoint-manager>
     <watches-manager />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/app/src/main/assets/logback.xml">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChecksumException.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.45673078">
-          <caret line="19" column="20" selection-start-line="19" selection-start-column="20" selection-end-line="19" selection-end-column="20" />
+        <state vertical-scroll-proportion="0.11737089">
+          <caret line="5" column="13" selection-start-line="5" selection-start-column="13" selection-end-line="5" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/.navigation/app/raw/main.nvg.xml">
-      <provider selected="true" editor-type-id="navigationeditor">
-        <state />
-      </provider>
-      <provider editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.5164319">
+          <caret line="22" column="0" selection-start-line="22" selection-start-column="0" selection-end-line="22" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/util/Log.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.21634616">
-          <caret line="25" column="19" selection-start-line="25" selection-start-column="19" selection-end-line="25" selection-end-column="19" />
-          <folding />
+        <state vertical-scroll-proportion="1.6666666">
+          <caret line="73" column="0" selection-start-line="73" selection-start-column="0" selection-end-line="73" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/res/values/strings.xml">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeRequestMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.5092025">
-          <caret line="32" column="22" selection-start-line="32" selection-start-column="22" selection-end-line="32" selection-end-column="22" />
-          <folding />
+        <state vertical-scroll-proportion="0.23474178">
+          <caret line="10" column="4" selection-start-line="10" selection-start-column="4" selection-end-line="10" selection-end-column="4" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.09615385">
-          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
-          <folding />
+        <state vertical-scroll-proportion="0.18779343">
+          <caret line="8" column="13" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicPumpRecord.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.072115384">
-          <caret line="11" column="13" selection-start-line="11" selection-start-column="13" selection-end-line="11" selection-end-column="13" />
-          <folding />
+        <state vertical-scroll-proportion="0.7183099">
+          <caret line="49" column="0" selection-start-line="49" selection-start-column="0" selection-end-line="49" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Record.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/GlucometerRecord.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.09615385">
+        <state vertical-scroll-proportion="0.09389672">
           <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
-          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicSensorRecord.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicConstants.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.09615385">
-          <caret line="5" column="13" selection-start-line="5" selection-start-column="13" selection-end-line="5" selection-end-column="13" />
-          <folding />
+        <state vertical-scroll-proportion="0.33333334">
+          <caret line="84" column="28" selection-start-line="84" selection-start-column="28" selection-end-line="84" selection-end-column="28" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/GlucometerRecord.java">
+    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/view/View.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.3125">
-          <caret line="13" column="0" selection-start-line="13" selection-start-column="0" selection-end-line="13" selection-end-column="0" />
+        <state vertical-scroll-proportion="0.0">
+          <caret line="4507" column="0" selection-start-line="4507" selection-start-column="0" selection-end-line="4507" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCGMService.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.09615385">
-          <caret line="6" column="13" selection-start-line="6" selection-start-column="13" selection-end-line="6" selection-end-column="13" />
-          <folding />
+        <state vertical-scroll-proportion="0.60294116">
+          <caret line="588" column="118" selection-start-line="588" selection-start-column="110" selection-end-line="588" selection-end-column="118" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/res/xml/preferences.xml">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Service.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="-3.9519231">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
+        <state vertical-scroll-proportion="0.58685446">
+          <caret line="191" column="29" selection-start-line="191" selection-start-column="29" selection-end-line="191" selection-end-column="29" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/res/xml/example_appwidget_info.xml">
+    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/content/ContextWrapper.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
+        <state vertical-scroll-proportion="0.33171913">
+          <caret line="611" column="15" selection-start-line="611" selection-start-column="15" selection-end-line="611" selection-end-column="15" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/res/xml/device_filter.xml">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/service/AbstractService.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.48076922">
-          <caret line="20" column="54" selection-start-line="20" selection-start-column="54" selection-end-line="20" selection-end-column="54" />
-          <folding />
+        <state vertical-scroll-proportion="0.2542373">
+          <caret line="55" column="16" selection-start-line="55" selection-start-column="16" selection-end-line="55" selection-end-column="16" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicReader.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/service/ServiceManager.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.024038462">
-          <caret line="51" column="13" selection-start-line="51" selection-start-column="13" selection-end-line="51" selection-end-column="13" />
-          <folding />
+        <state vertical-scroll-proportion="-1.6962306">
+          <caret line="50" column="29" selection-start-line="50" selection-start-column="20" selection-end-line="50" selection-end-column="29" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/adb.xml">
-      <provider editor-type-id="android-designer">
-        <state />
-      </provider>
+    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/view/ContextThemeWrapper.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.039473683">
-          <caret line="1" column="18" selection-start-line="1" selection-start-column="16" selection-end-line="1" selection-end-column="18" />
-          <folding />
+        <state vertical-scroll-proportion="0.33259425">
+          <caret line="43" column="29" selection-start-line="43" selection-start-column="29" selection-end-line="43" selection-end-column="29" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/res/drawable-mdpi/ic_launcher.png">
-      <provider selected="true" editor-type-id="images">
-        <state />
-      </provider>
-    </entry>
-    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/content/Intent.java">
+    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/app/Activity.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.41483516">
-          <caret line="4233" column="0" selection-start-line="4233" selection-start-column="0" selection-end-line="4233" selection-end-column="0" />
-          <folding />
+        <state vertical-scroll-proportion="0.33259425">
+          <caret line="2079" column="21" selection-start-line="2079" selection-start-column="21" selection-end-line="2079" selection-end-column="21" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/build/intermediates/manifests/full/debug/AndroidManifest.xml">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/EndEHSMMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.33251834">
-          <caret line="66" column="0" selection-start-line="66" selection-start-column="0" selection-end-line="66" selection-end-column="0" />
+        <state vertical-scroll-proportion="0.3286385">
+          <caret line="14" column="31" selection-start-line="14" selection-start-column="31" selection-end-line="14" selection-end-column="31" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/AndroidManifest.xml">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/BeginEHSMMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.49519232">
-          <caret line="46" column="68" selection-start-line="46" selection-start-column="68" selection-end-line="46" selection-end-column="68" />
-          <folding />
+        <state vertical-scroll-proportion="0.28169015">
+          <caret line="12" column="35" selection-start-line="12" selection-start-column="35" selection-end-line="12" selection-end-column="35" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/os/Build.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.33333334">
-          <caret line="570" column="32" selection-start-line="570" selection-start-column="32" selection-end-line="570" selection-end-column="32" />
+        <state vertical-scroll-proportion="0.91549295">
+          <caret line="71" column="74" selection-start-line="71" selection-start-column="74" selection-end-line="71" selection-end-column="74" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCGMService.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusResponseMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.09775641">
-          <caret line="71" column="6" selection-start-line="71" selection-start-column="4" selection-end-line="71" selection-end-column="6" />
-          <folding>
-            <element signature="imports" expanded="false" />
-          </folding>
+        <state vertical-scroll-proportion="0.25187033">
+          <caret line="7" column="13" selection-start-line="7" selection-start-column="13" selection-end-line="7" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/USB/CommonUsbSerialDriver.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeResponseMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.28846154">
-          <caret line="33" column="15" selection-start-line="33" selection-start-column="15" selection-end-line="33" selection-end-column="15" />
-          <folding />
+        <state vertical-scroll-proportion="0.5137157">
+          <caret line="17" column="0" selection-start-line="17" selection-start-column="0" selection-end-line="17" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/CommonUsbDriver.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicReceiveMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0">
-          <caret line="31" column="52" selection-start-line="31" selection-start-column="52" selection-end-line="31" selection-end-column="52" />
-          <folding>
-            <element signature="imports" expanded="false" />
-          </folding>
+        <state vertical-scroll-proportion="0.34413967">
+          <caret line="46" column="101" selection-start-line="46" selection-start-column="101" selection-end-line="46" selection-end-column="101" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/USBPower.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/UnexpectedMessageException.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="-0.009615385">
-          <caret line="6" column="13" selection-start-line="6" selection-start-column="13" selection-end-line="6" selection-end-column="13" />
-          <folding />
+        <state vertical-scroll-proportion="0.11737089">
+          <caret line="5" column="13" selection-start-line="5" selection-start-column="13" selection-end-line="5" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomReader.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/DeviceRecord.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="4.121813">
-          <caret line="115" column="30" selection-start-line="115" selection-start-column="26" selection-end-line="115" selection-end-column="31" />
-          <folding />
+        <state vertical-scroll-proportion="0.09389672">
+          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/USB/UsbSerialProber.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Record.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="4.121813">
-          <caret line="137" column="34" selection-start-line="137" selection-start-column="28" selection-end-line="137" selection-end-column="34" />
-          <folding />
+        <state vertical-scroll-proportion="0.09389672">
+          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/hardware/usb/UsbDevice.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicSensorRecord.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.33144477">
-          <caret line="154" column="0" selection-start-line="154" selection-start-column="0" selection-end-line="154" selection-end-column="0" />
+        <state vertical-scroll-proportion="0.09389672">
+          <caret line="5" column="13" selection-start-line="5" selection-start-column="13" selection-end-line="5" selection-end-column="13" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Service.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/MedtronicPumpRecord.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.3621795">
-          <caret line="256" column="36" selection-start-line="256" selection-start-column="34" selection-end-line="256" selection-end-column="36" />
-          <folding>
-            <element signature="imports" expanded="false" />
-          </folding>
+        <state vertical-scroll-proportion="0.5399061">
+          <caret line="30" column="48" selection-start-line="30" selection-start-column="48" selection-end-line="30" selection-end-column="48" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/USB/HexDump.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicReader.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.04249292">
-          <caret line="22" column="13" selection-start-line="22" selection-start-column="13" selection-end-line="22" selection-end-column="13" />
-          <folding />
+        <state vertical-scroll-proportion="0.28638497">
+          <caret line="2848" column="16" selection-start-line="2848" selection-start-column="16" selection-end-line="2848" selection-end-column="16" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/hardware/usb/UsbEndpoint.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusRequestMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0">
-          <caret line="60" column="0" selection-start-line="60" selection-start-column="0" selection-end-line="60" selection-end-column="0" />
+        <state vertical-scroll-proportion="0.2112676">
+          <caret line="9" column="54" selection-start-line="9" selection-start-column="54" selection-end-line="9" selection-end-column="54" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/hardware/usb/UsbDeviceConnection.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicSendMessage.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="-0.57417583">
-          <caret line="176" column="0" selection-start-line="176" selection-start-column="0" selection-end-line="176" selection-end-column="0" />
+        <state vertical-scroll-proportion="0.3568075">
+          <caret line="20" column="7" selection-start-line="20" selection-start-column="7" selection-end-line="20" selection-end-column="7" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$USER_HOME$/Library/Android/sdk/sources/android-21/android/hardware/usb/UsbConstants.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/EGVRecord.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.2259887">
-          <caret line="22" column="19" selection-start-line="22" selection-start-column="19" selection-end-line="22" selection-end-column="19" />
+        <state vertical-scroll-proportion="0.28169015">
+          <caret line="14" column="0" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/HidBridge.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomReader.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.9103139">
-          <caret line="163" column="32" selection-start-line="163" selection-start-column="32" selection-end-line="163" selection-end-column="32" />
-          <folding />
+        <state vertical-scroll-proportion="-0.11737089">
+          <caret line="311" column="16" selection-start-line="311" selection-start-column="16" selection-end-line="311" selection-end-column="16" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/USB/CdcAcmSerialDriver.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.26683939">
-          <caret line="34" column="47" selection-start-line="34" selection-start-column="42" selection-end-line="34" selection-end-column="54" />
+    <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/widget_lock.xml">
+      <provider editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
           <folding />
         </state>
       </provider>
+      <provider selected="true" editor-type-id="android-designer">
+        <state />
+      </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/service/AbstractService.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.36150235">
-          <caret line="58" column="11" selection-start-line="58" selection-start-column="8" selection-end-line="58" selection-end-column="11" />
-          <folding>
-            <element signature="imports" expanded="false" />
-            <element signature="e#1288#1299#0" expanded="false" />
-          </folding>
+    <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/widget_main.xml">
+      <provider editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0">
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
+      <provider selected="true" editor-type-id="android-designer">
+        <state />
+      </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/service/ServiceManager.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/AndroidManifest.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="-0.37254903">
-          <caret line="50" column="29" selection-start-line="50" selection-start-column="20" selection-end-line="50" selection-end-column="29" />
-          <folding>
-            <element signature="imports" expanded="false" />
-          </folding>
+        <state vertical-scroll-proportion="-0.625">
+          <caret line="15" column="99" selection-start-line="15" selection-start-column="99" selection-end-line="15" selection-end-column="99" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/USB/UsbSerialDriver.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/DataLog.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="-0.3286385">
-          <caret line="29" column="17" selection-start-line="29" selection-start-column="17" selection-end-line="29" selection-end-column="17" />
+        <state vertical-scroll-proportion="0.09389672">
+          <caret line="4" column="13" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/UsbDriver.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/CommandSenderThread.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="1.1737089">
-          <caret line="68" column="22" selection-start-line="68" selection-start-column="22" selection-end-line="68" selection-end-column="22" />
+        <state vertical-scroll-proportion="0.23474178">
+          <caret line="27" column="13" selection-start-line="27" selection-start-column="13" selection-end-line="27" selection-end-column="13" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/USB/UsbHidDriver.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/TestService.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.33260393">
-          <caret line="96" column="68" selection-start-line="96" selection-start-column="12" selection-end-line="96" selection-end-column="68" />
+        <state vertical-scroll-proportion="1.1737089">
+          <caret line="66" column="95" selection-start-line="66" selection-start-column="95" selection-end-line="66" selection-end-column="95" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChecksumException.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsActivity.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.23474178">
-          <caret line="10" column="0" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="0" />
-          <folding>
-            <element signature="e#194#195#0" expanded="false" />
-            <element signature="e#224#225#0" expanded="false" />
-          </folding>
+        <state vertical-scroll-proportion="0.28169015">
+          <caret line="13" column="1" selection-start-line="13" selection-start-column="1" selection-end-line="13" selection-end-column="1" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/TestService.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/res/values/strings.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0">
-          <caret line="42" column="9" selection-start-line="40" selection-start-column="8" selection-end-line="42" selection-end-column="9" />
+        <state vertical-scroll-proportion="0.30612245">
+          <caret line="12" column="30" selection-start-line="12" selection-start-column="30" selection-end-line="12" selection-end-column="30" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/eula/Eula.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0">
-          <caret line="963" column="0" selection-start-line="963" selection-start-column="0" selection-end-line="963" selection-end-column="0" />
+        <state vertical-scroll-proportion="0.38967136">
+          <caret line="125" column="34" selection-start-line="125" selection-start-column="34" selection-end-line="125" selection-end-column="34" />
           <folding>
-            <element signature="imports" expanded="true" />
+            <element signature="e#2820#2839#0" expanded="true" />
+            <element signature="e#2943#3357#0" expanded="true" />
+            <element signature="e#3356#3357#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0">
-          <caret line="115" column="33" selection-start-line="115" selection-start-column="33" selection-end-line="115" selection-end-column="33" />
+        <state vertical-scroll-proportion="-0.12254902">
+          <caret line="22" column="46" selection-start-line="22" selection-start-column="41" selection-end-line="22" selection-end-column="52" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/res/xml/preferences.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.75117373">
-          <caret line="35" column="37" selection-start-line="35" selection-start-column="37" selection-end-line="35" selection-end-column="37" />
+        <state vertical-scroll-proportion="0.025510205">
+          <caret line="1" column="0" selection-start-line="51" selection-start-column="29" selection-end-line="51" selection-end-column="40" />
           <folding>
-            <element signature="e#729#730#0" expanded="true" />
-            <element signature="e#756#757#0" expanded="true" />
-            <element signature="e#793#794#0" expanded="true" />
-            <element signature="e#819#820#0" expanded="true" />
-            <element signature="e#974#975#0" expanded="true" />
-            <element signature="e#1004#1005#0" expanded="true" />
-            <element signature="e#1073#1074#0" expanded="true" />
-            <element signature="e#1205#1206#0" expanded="true" />
-            <element signature="e#1251#1252#0" expanded="true" />
+            <element signature="e#3657#3674#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/res/menu/menu.xml">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
-          <caret line="21" column="34" selection-start-line="21" selection-start-column="34" selection-end-line="21" selection-end-column="34" />
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
+          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.3286385">
-          <caret line="18" column="12" selection-start-line="18" selection-start-column="12" selection-end-line="18" selection-end-column="12" />
+        <state vertical-scroll-proportion="1.8544601">
+          <caret line="82" column="37" selection-start-line="82" selection-start-column="37" selection-end-line="82" selection-end-column="37" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
-          <caret line="52" column="31" selection-start-line="52" selection-start-column="31" selection-end-line="52" selection-end-column="31" />
+          <caret line="524" column="0" selection-start-line="524" selection-start-column="0" selection-end-line="524" selection-end-column="0" />
           <folding>
             <element signature="imports" expanded="true" />
-            <element signature="e#632#633#0" expanded="true" />
-            <element signature="e#684#685#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
-      <provider selected="true" editor-type-id="text-editor">
+    <entry file="file://$PROJECT_DIR$/app/src/main/res/layout/adb.xml">
+      <provider editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
-          <caret line="117" column="8" selection-start-line="117" selection-start-column="8" selection-end-line="117" selection-end-column="8" />
-          <folding>
-            <element signature="imports" expanded="true" />
-            <element signature="e#1312#1313#0" expanded="true" />
-            <element signature="e#1344#1345#0" expanded="true" />
-          </folding>
+          <caret line="5" column="27" selection-start-line="5" selection-start-column="27" selection-end-line="5" selection-end-column="27" />
+          <folding />
         </state>
       </provider>
+      <provider selected="true" editor-type-id="android-designer">
+        <state />
+      </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/MessageHandler.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/upload/UploadHelper.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.16431925">
-          <caret line="7" column="26" selection-start-line="7" selection-start-column="26" selection-end-line="7" selection-end-column="26" />
+        <state vertical-scroll-proportion="-1.1111112">
+          <caret line="2" column="7" selection-start-line="2" selection-start-column="7" selection-end-line="2" selection-end-column="7" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0">
-          <caret line="8" column="32" selection-start-line="8" selection-start-column="32" selection-end-line="8" selection-end-column="32" />
+          <caret line="4" column="0" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java">
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.28169015">
-          <caret line="12" column="38" selection-start-line="12" selection-start-column="38" selection-end-line="12" selection-end-column="38" />
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
+        <state vertical-scroll-proportion="0.0">
+          <caret line="105" column="0" selection-start-line="105" selection-start-column="0" selection-end-line="105" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.33802816">
+          <caret line="189" column="91" selection-start-line="189" selection-start-column="91" selection-end-line="189" selection-end-column="91" />
+          <folding />
         </state>
       </provider>
     </entry>
diff --git a/app/app.iml b/app/app.iml
index 51075df88851a7ade67afe4b9491fa4e692108b6..afe68c33758cbc3a866091b0a3509986937eaba5 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -12,10 +12,7 @@
         <option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
         <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
         <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
-        <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
-        <option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
         <afterSyncTasks>
-          <task>generateDebugAndroidTestSources</task>
           <task>generateDebugSources</task>
         </afterSyncTasks>
         <option name="ALLOW_USER_CONFIGURATION" value="false" />
@@ -28,7 +25,7 @@
   </component>
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
     <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
-    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
+    <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
     <exclude-output />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
@@ -50,6 +47,15 @@
       <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
@@ -57,6 +63,7 @@
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -64,16 +71,36 @@
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/build/.DS_Store" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
       <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
diff --git a/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java b/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java
index e38a52e7fe3a2b89acc5fc47ec99f7009940b724..f1794249fe5bb3cfcf96939a2d0caf73565f2540 100644
--- a/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java
+++ b/app/src/main/java/com/nightscout/android/dexcom/DexcomG4Activity.java
@@ -3,6 +3,7 @@ package com.nightscout.android.dexcom;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.ObjectInputStream;
+import java.text.DateFormat;
 import java.text.DecimalFormat;
 
 import org.slf4j.LoggerFactory;
@@ -30,7 +31,9 @@ import android.os.Messenger;
 import android.os.RemoteException;
 import android.os.StrictMode;
 import android.preference.PreferenceManager;
+import android.text.Html;
 import android.text.InputType;
+import android.text.format.DateUtils;
 import android.text.method.ScrollingMovementMethod;
 import android.util.Log;
 import android.view.Menu;
@@ -51,9 +54,9 @@ import com.nightscout.android.eula.Eula.OnEulaAgreedTo;
 import com.nightscout.android.medtronic.MedtronicCGMService;
 import com.nightscout.android.medtronic.service.MedtronicCNLService;
 import com.nightscout.android.medtronic.MedtronicConstants;
-import com.nightscout.android.medtronic.service.TestService;
 import com.nightscout.android.service.ServiceManager;
 import com.nightscout.android.settings.SettingsActivity;
+import com.nightscout.android.upload.Medtronic640gPumpRecord;
 import com.nightscout.android.upload.MedtronicSensorRecord;
 import com.nightscout.android.upload.Record;
 
@@ -66,10 +69,10 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
     public static final int CNL_24 = 2;
 
     private static final String TAG = DexcomG4Activity.class.getSimpleName();
-    private int cgmSelected = DEXCOMG4;
+    private int cgmSelected = CNL_24;
     private int calibrationSelected = MedtronicConstants.CALIBRATION_GLUCOMETER;
 
-    private Handler mHandler = new Handler();
+    private Handler mHandler = new DexcomG4ActivityHandler();
 
     private int maxRetries = 20;
     private int retryCount = 0;
@@ -94,22 +97,83 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
     Boolean mHandlerActive = false;
     Object mHandlerActiveLock = new Object();
     Boolean usbAllowedPermission = false;
-    final Messenger mMessenger = new Messenger(new IncomingHandler());
+    //final Messenger mMessenger = new Messenger(new IncomingHandler());
     ActivityManager manager = null;
     final Context ctx = this;
     SharedPreferences settings = null;
     SharedPreferences prefs = null;
     private static final boolean ISDEBUG = true;
 
+    // TODO - merge this with IncomingHandler
+    public class DexcomG4ActivityHandler extends Handler {
+        public static final int MSG_ERROR = 1;
+        public static final int MSG_STATUS = 2;
+        public static final int MSG_DATA = 3;
+
+        @Override
+        public void handleMessage(Message msg) {
+            Log.d( TAG, "Got message from Service." );
+            switch ( cgmSelected ) {
+                case CNL_24:
+                    //usbAllowedPermission = true;
+                    switch (msg.what) {
+                        case MSG_ERROR:
+                            display.setText(msg.obj.toString(), BufferType.EDITABLE);
+                            break;
+                        case MSG_STATUS:
+                            display.setText(msg.obj.toString(), BufferType.EDITABLE);
+                            break;
+                        case MSG_DATA:
+                            Medtronic640gPumpRecord record = (Medtronic640gPumpRecord) msg.obj;
+
+                            DecimalFormat df = null;
+                            if (prefs.getBoolean("mmolDecimals", false))
+                                df = new DecimalFormat("#.##");
+                            else
+                                df = new DecimalFormat("#.#");
+                            String bglString = "---";
+                            String unitsString = "mg/dL";
+                            if (prefs.getBoolean("mmolxl", false)) {
+                                try {
+                                    float fBgValue = Float.valueOf(record.sensorBGL);
+                                    bglString = df.format(fBgValue / 18.016f);
+                                    unitsString = "mmol/L";
+                                    log.info("mmolxl true --> " + bglString);
+                                } catch (Exception e) {
+
+                                }
+                            } else {
+                                bglString = String.valueOf(record.sensorBGL);
+                                log.info("mmolxl false --> " + bglString);
+                            }
+
+                            mTitleTextView.setText(Html.fromHtml(
+                                    String.format( "<big><b>%s</b></big> <small>%s</small>", bglString, unitsString)));
+
+                            mDumpTextView.setTextColor(Color.WHITE);
+                            mDumpTextView.setText(Html.fromHtml(
+                                String.format( "<b>BGL at:</b> %s<br/><b>Pump Time:</b> %s<br/><b>Active Insulin: <b>%.3f<br/><b>Rate of Change: </b>%s",
+                                    DateUtils.formatDateTime(getBaseContext(),record.sensorBGLDate.getTime(),DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME),
+                                    DateUtils.formatDateTime(getBaseContext(),record.pumpDate.getTime(),DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME),
+                                    record.activeInsulin,
+                                    record.direction
+                                )
+                            ));
+
+                            break;
+                    }
+                default:
+                    super.handleMessage(msg);
+            }
+        }
+    }
+
+    /*
     class IncomingHandler extends Handler {
         @Override
         public void handleMessage(Message msg) {
             switch (msg.what) {
                 case MedtronicConstants.MSG_MEDTRONIC_CGM_MESSAGE_RECEIVED:
-                /*if (msgsDisplayed > 8){
-            		display.setText("", BufferType.EDITABLE);
-            		msgsDisplayed = 0;
-            	}*/
                     Log.i("MessageReceived", msg.getData().getString("data") + "\n");
                     if (ISDEBUG) {
                         display.setText(display.getText() + "Medtronic CGM Message: " + msg.getData().getString("data") + "\n", BufferType.EDITABLE);
@@ -181,7 +245,9 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
             }
         }
     }
+    */
 
+    /*
     private void showUseCalibConfirmation(final float num, final boolean calibrate, final boolean isCalFactorFromPump) {
         AlertDialog.Builder alert = new AlertDialog.Builder(ctx);
         alert.setTitle("Calibration Detected!!!");
@@ -244,7 +310,9 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
 
         alert.show();
     }
+    */
 
+    /*
     private ServiceConnection mConnection = new ServiceConnection() {
         public void onServiceConnected(ComponentName className, IBinder service) {
             bService = service;
@@ -278,9 +346,11 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
             }
         }
     };
+    */
 
 
     //All I'm really doing here is creating a simple activity to launch and maintain the service
+    /*
     private Runnable updateDataView = new Runnable() {
         public void run() {
             synchronized (mHandlerActiveLock) {
@@ -365,6 +435,28 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                                 } else
                                     mDumpTextView.setText("\n" + (System.currentTimeMillis() - record.displayDateTime) / 60000 + " min. ago\n" + record.bGValue + "  " + record.trendArrow + "\n" + calib + "\n");
 
+                            } else if (cgmSelected == CNL_24 && auxRecord instanceof Medtronic640gPumpRecord && auxRecord != null) {
+                                Medtronic640gPumpRecord record = (Medtronic640gPumpRecord) auxRecord;
+
+                                String bglString = "---";
+                                String unitsString = "mg/dL";
+                                if (prefs.getBoolean("mmolxl", false)) {
+                                    try {
+                                        float fBgValue = Float.valueOf(record.sensorBGL);
+                                        bglString = df.format(fBgValue / 18.016f);
+                                        unitsString = "mmol/L";
+                                        log.info("mmolxl true --> " + bglString);
+                                    } catch (Exception e) {
+
+                                    }
+                                } else {
+                                    bglString = String.valueOf(record.sensorBGL);
+                                    log.info("mmolxl false --> " + bglString);
+                                }
+                                mDumpTextView.setTextColor(Color.WHITE);
+                                mDumpTextView.setText(Html.fromHtml(
+                                    String.format( "<div><big><b>%s</b></big> <small>%s</small></div><br/>%s", bglString, unitsString, record.displayTime )
+                                ));
                             } else if (auxRecord instanceof EGVRecord) {
                                 EGVRecord record = (EGVRecord) auxRecord;
                                 if (prefs.getBoolean("mmolxl", false)) {
@@ -405,6 +497,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
             }
         }
     };
+    */
 
 
     private class BatteryReceiver extends BroadcastReceiver {
@@ -423,7 +516,6 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
     @Override
     public void onCreate(Bundle savedInstanceState) {
         Log.i(TAG, "onCreate called");
-        keepServiceAlive = Eula.show(this);
         super.onCreate(savedInstanceState);
 
         if (android.os.Build.VERSION.SDK_INT > 9) {
@@ -435,25 +527,9 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                 MedtronicConstants.PREFS_NAME, 0);
         PreferenceManager.getDefaultSharedPreferences(getBaseContext()).registerOnSharedPreferenceChangeListener(this);
         prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
-        if (prefs.contains("monitor_type")) {
-            String type = prefs.getString("monitor_type", "1");
-            if ("3".equalsIgnoreCase(type)) {
-                cgmSelected = CNL_24;
-            } else if ("2".equalsIgnoreCase(type)) {
-                cgmSelected = MEDTRONIC_CGM;
-                if (prefs.contains("calibrationType")) {
-                    type = prefs.getString("calibrationType", "3");
-                    if ("3".equalsIgnoreCase(type))
-                        calibrationSelected = MedtronicConstants.CALIBRATION_MANUAL;
-                    else if ("2".equalsIgnoreCase(type)) {
-                        calibrationSelected = MedtronicConstants.CALIBRATION_SENSOR;
-                    } else
-                        calibrationSelected = MedtronicConstants.CALIBRATION_GLUCOMETER;
-                }
-            } else {
-                cgmSelected = DEXCOMG4;
-            }
-        }
+
+        keepServiceAlive = Eula.show(this, prefs);
+
         mArrow = new BatteryReceiver();
         IntentFilter mIntentFilter = new IntentFilter();
         mIntentFilter.addAction(Intent.ACTION_BATTERY_LOW);
@@ -477,13 +553,13 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
             if (isMyServiceRunning() && cgmSelected == MEDTRONIC_CGM) {
                 doBindService();
             }
-            mHandler.post(updateDataView);
+            //mHandler.post(updateDataView);
             mHandlerActive = true;
         }
 
 
-        mTitleTextView.setTextColor(Color.YELLOW);
-        mTitleTextView.setText("CGM Service Pending");
+        //mTitleTextView.setTextColor(Color.YELLOW);
+        //mTitleTextView.setText("CGM Service Pending");
 
         b1.setText("Stop Uploading CGM Data");
         lnr.addView(b1);
@@ -493,7 +569,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
         b2.setText("Clear Log");
         b2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1.0f));
         b4 = new Button(this);
-        b4.setText("Test CNL");
+        b4.setText("Get Now");
         b4.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1.0f));
         lnr3.addView(b4);
         if (menu != null) {
@@ -534,12 +610,15 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
         b4.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
-                display.setText("Yolo swag", BufferType.EDITABLE);
                 display.setKeyListener(null);
-                if( !cgmService.isRunning() ) {
-                    cgmService.start();
-                } else {
-                    cgmService.stop();
+                Log.d( TAG, "Pursh de butten" );
+                if( cgmService != null ) {
+                    if (!cgmService.isRunning()) {
+                        cgmService.start();
+                    } else {
+                        cgmService.stop();
+                        cgmService.start();
+                    }
                 }
             }
         });
@@ -550,17 +629,17 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                 synchronized (mHandlerActiveLock) {
                     if (b1.getText() == "Stop Uploading CGM Data") {
                         mHandlerActive = false;
-                        mHandler.removeCallbacks(updateDataView);
+                        //mHandler.removeCallbacks(updateDataView);
                         keepServiceAlive = false;
                         stopCGMServices();
                         b1.setText("Start Uploading CGM Data");
-                        mTitleTextView.setTextColor(Color.RED);
-                        mTitleTextView.setText("CGM Service Stopped");
+                        //mTitleTextView.setTextColor(Color.RED);
+                        //mTitleTextView.setText("CGM Service Stopped");
                         finish();
                     } else {
                         mHandlerActive = false;
-                        mHandler.removeCallbacks(updateDataView);
-                        mHandler.post(updateDataView);
+                        //mHandler.removeCallbacks(updateDataView);
+                        //mHandler.post(updateDataView);
                         if (!usbAllowedPermission)
                             if (mService == null && bService != null) {
                                 mService = new Messenger(bService);
@@ -568,7 +647,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                         if (mService != null) {
                             try {
                                 Message msg = Message.obtain(null, MedtronicConstants.MSG_MEDTRONIC_CGM_REQUEST_PERMISSION, 0, 0);
-                                msg.replyTo = mMessenger;
+                                //msg.replyTo = mMessenger;
                                 mService.send(msg);
                             } catch (RemoteException e) {
                                 mService = null;
@@ -581,7 +660,16 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
 
             }
         });
+    }
 
+    @Override
+    protected void onPostCreate(Bundle savedInstanceState) {
+        super.onPostCreate(savedInstanceState);
+        startCGMServices();
+        if( cgmService != null ) {
+            Log.d( TAG, "onPostCreate: Starting the service");
+            cgmService.start();
+        }
     }
 
     @Override
@@ -596,6 +684,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
         log.info("ON RESUME!");
         super.onResume();
         // Refresh the status
+        /*
         try {
             Record auxRecord = DexcomG4Activity.this.loadClassFile(new File(
                     getBaseContext().getFilesDir(), "save.bin"));
@@ -694,6 +783,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
         } catch (Exception e) {
             e.printStackTrace();
         }
+        */
 
     }
 
@@ -776,7 +866,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                 if (mService != null) {
                     try {
                         Message msg = Message.obtain(null, MedtronicConstants.MSG_MEDTRONIC_SEND_GET_SENSORCAL_FACTOR);
-                        msg.replyTo = mMessenger;
+                        //msg.replyTo = mMessenger;
                         mService.send(msg);
                     } catch (RemoteException e) {
                         StringBuffer sb1 = new StringBuffer("");
@@ -800,7 +890,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                 if (mService != null) {
                     try {
                         Message msg = Message.obtain(null, MedtronicConstants.MSG_MEDTRONIC_SEND_GET_PUMP_INFO);
-                        msg.replyTo = mMessenger;
+                        //msg.replyTo = mMessenger;
                         mService.send(msg);
                     } catch (RemoteException e) {
                         StringBuffer sb1 = new StringBuffer("");
@@ -848,7 +938,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                                 b.putString("sgv", value);
                                 prefs.edit().putString("manual_sgv", value).commit();
                                 msg.setData(b);
-                                msg.replyTo = mMessenger;
+                                //msg.replyTo = mMessenger;
                                 mService.send(msg);
                             } catch (RemoteException e) {
                                 StringBuffer sb1 = new StringBuffer("");
@@ -913,7 +1003,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                                 b.putString("sgv", value);
                                 prefs.edit().putString("instant_sgv", value).commit();
                                 msg.setData(b);
-                                msg.replyTo = mMessenger;
+                                //msg.replyTo = mMessenger;
                                 mService.send(msg);
                             } catch (RemoteException e) {
                                 StringBuffer sb1 = new StringBuffer("");
@@ -955,28 +1045,9 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                 doBindService();
                 return;
             case CNL_24:
-                display.setText("Kicking lyrics right through your brain.", BufferType.EDITABLE);
                 Log.d("DexcomActivity", "Starting Medtronic CNL service");
-                this.cgmService = new ServiceManager(this, MedtronicCNLService.class, new Handler() {
-                    @Override
-                    public void handleMessage(Message msg) {
-                        Log.d( TAG, "Got message from Service." );
-                        switch (msg.what) {
-                            case MedtronicCNLService.MSG_STATUS:
-                                display.setText( msg.obj.toString(), BufferType.EDITABLE );
-                                break;
-                            case TestService.MSG_COUNTER:
-                                // Receive counter value from service 1
-                                display.setText("Counter @ Service1:" + msg.arg1, BufferType.EDITABLE);
-                                break;
-                            case TestService.MSG_STATUS:
-                                display.setText( msg.obj.toString(), BufferType.EDITABLE );
-                                break;
-                            default:
-                                super.handleMessage(msg);
-                        }
-                    }
-                });
+                cgmService = new ServiceManager(this, MedtronicCNLService.class, mHandler );
+                //cgmService.start();
                 break;
             default:
                 startService(new Intent(DexcomG4Activity.this, DexcomG4Service.class));
@@ -993,7 +1064,9 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                 }
                 return;
             case CNL_24:
-                stopService(new Intent(DexcomG4Activity.this, MedtronicCNLService.class));
+                if( cgmService != null ) {
+                    cgmService.stop();
+                }
                 break;
             default:
                 stopService(new Intent(DexcomG4Activity.this, DexcomG4Service.class));
@@ -1019,7 +1092,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
         PreferenceManager.getDefaultSharedPreferences(getBaseContext()).unregisterOnSharedPreferenceChangeListener(this);
         unregisterReceiver(mArrow);
         synchronized (mHandlerActiveLock) {
-            mHandler.removeCallbacks(updateDataView);
+            //mHandler.removeCallbacks(updateDataView);
             doUnbindService();
             if (keepServiceAlive) {
                 killService();
@@ -1032,13 +1105,14 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
             editor.commit();
             super.onDestroy();
         }
+        stopCGMServices();
     }
 
     void doBindService() {
         if ((service != null && isMyServiceRunning()) || mIsBound)
             stopCGMServices();
         service = new Intent(this, MedtronicCGMService.class);
-        bindService(service, mConnection, Context.BIND_AUTO_CREATE);
+        //bindService(service, mConnection, Context.BIND_AUTO_CREATE);
         mIsBound = true;
     }
 
@@ -1051,14 +1125,14 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
             if (mService != null) {
                 try {
                     Message msg = Message.obtain(null, MedtronicConstants.MSG_UNREGISTER_CLIENT);
-                    msg.replyTo = mMessenger;
+                    //msg.replyTo = mMessenger;
                     mService.send(msg);
                 } catch (RemoteException e) {
                     // There is nothing special we need to do if the service has crashed.
                 }
             }
             // Detach our existing connection.
-            unbindService(mConnection);
+            //unbindService(mConnection);
             mIsBound = false;
         }
     }
@@ -1074,38 +1148,6 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                                           String key) {
         try {
-            if (sharedPreferences.contains("monitor_type")) {
-                String type = sharedPreferences.getString("monitor_type", "1");
-                if ("3".equalsIgnoreCase(type)) {
-                    cgmSelected = CNL_24;
-                } else if ("2".equalsIgnoreCase(type)) {
-                    cgmSelected = MEDTRONIC_CGM;
-                    if (sharedPreferences.contains("calibrationType")) {
-                        type = sharedPreferences.getString("calibrationType", "3");
-                        if ("3".equalsIgnoreCase(type))
-                            calibrationSelected = MedtronicConstants.CALIBRATION_MANUAL;
-                        else if ("2".equalsIgnoreCase(type)) {
-                            calibrationSelected = MedtronicConstants.CALIBRATION_SENSOR;
-                        } else
-                            calibrationSelected = MedtronicConstants.CALIBRATION_GLUCOMETER;
-                    }
-                } else {
-                    cgmSelected = DEXCOMG4;
-                }
-	         	/*if (calibrationSelected == MedtronicConstants.CALIBRATION_MANUAL)
-	         		b4.setVisibility(View.VISIBLE);
-	             else
-	             	b4.setVisibility(View.GONE);*/
-                if (menu != null) {
-                    if (calibrationSelected == MedtronicConstants.CALIBRATION_MANUAL) {
-                        menu.getItem(3).setVisible(false);
-                        menu.getItem(4).setVisible(true);
-                    } else {
-                        menu.getItem(3).setVisible(false);
-                        menu.getItem(4).setVisible(false);
-                    }
-                }
-            }
             if (cgmSelected == MEDTRONIC_CGM) {
                 SharedPreferences prefs = PreferenceManager
                         .getDefaultSharedPreferences(getBaseContext());
@@ -1137,46 +1179,11 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                 menu.getItem(1).setVisible(false);
             }
 
-            if (key.equals("monitor_type")) {
-                stopService(new Intent(DexcomG4Activity.this, DexcomG4Service.class));
-                SharedPreferences settings = getSharedPreferences(MedtronicConstants.PREFS_NAME, 0);
-                SharedPreferences.Editor editor = settings.edit();
-                String type = prefs.getString("monitor_type", "1");
-                if ("1".equalsIgnoreCase(type)) {
-                    editor.remove("lastGlucometerMessage");
-                    editor.remove("previousValue");
-                    editor.remove("expectedSensorSortNumber");
-                    editor.remove("knownDevices");
-                    editor.remove("isCalibrating");
-                    editor.remove("lastGlucometerMessage");
-                    editor.remove("previousValue");
-                    editor.remove("lastGlucometerValue");
-                    editor.remove("lastGlucometerDate");
-                    editor.remove("expectedSensorSortNumberForCalibration0");
-                    editor.remove("expectedSensorSortNumberForCalibration1");
-                    editor.remove("lastPumpAwake");
-                    editor.commit();
-                }
-                if (!sharedPreferences.getBoolean("IUNDERSTAND", false)) {
-                    synchronized (mHandlerActiveLock) {
-                        mHandler.removeCallbacks(updateDataView);
-                        mHandlerActive = false;
-                    }
-                    b1.setText("Start Uploading CGM Data");
-                    mTitleTextView.setTextColor(Color.RED);
-                    mTitleTextView.setText("CGM Service Stopped");
-                    stopCGMServices();
-                } else {
-                    startCGMServices();
-                    mHandler.post(updateDataView);
-                    mHandlerActive = true;
-                }
-            }
             //If i do not
             if (key.equals("IUNDERSTAND")) {
                 if (!sharedPreferences.getBoolean("IUNDERSTAND", false)) {
                     synchronized (mHandlerActiveLock) {
-                        mHandler.removeCallbacks(updateDataView);
+                        //mHandler.removeCallbacks(updateDataView);
                         mHandlerActive = false;
                     }
                     b1.setText("Start Uploading CGM Data");
@@ -1185,7 +1192,7 @@ public class DexcomG4Activity extends Activity implements OnSharedPreferenceChan
                     stopCGMServices();
                 } else {
                     startCGMServices();
-                    mHandler.post(updateDataView);
+                    //mHandler.post(updateDataView);
                     mHandlerActive = true;
                 }
             }
diff --git a/app/src/main/java/com/nightscout/android/eula/Eula.java b/app/src/main/java/com/nightscout/android/eula/Eula.java
index 881273965213d2094e672ce64562e147c2285428..f3994dd15b261151e58bffc07cb62bc209593fbc 100644
--- a/app/src/main/java/com/nightscout/android/eula/Eula.java
+++ b/app/src/main/java/com/nightscout/android/eula/Eula.java
@@ -25,20 +25,21 @@ import java.io.IOException;
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.io.Closeable;
+import java.util.Map;
 
 import com.nightscout.android.R;
 
 /**
  * Displays an EULA ("End User License Agreement") that the user has to accept before
- * using the application. Your application should call {@link Eula#show(android.app.Activity)}
+ * using the application. Your application should call {@link Eula#show(android.app.Activity, SharedPreferences)}
  * in the onCreate() method of the first activity. If the user accepts the EULA, it will never
  * be shown again. If the user refuses, {@link android.app.Activity#finish()} is invoked
  * on your activity.
  */
 public class Eula {
     private static final String ASSET_EULA = "EULA";
-    private static final String PREFERENCE_EULA_ACCEPTED = "eula.accepted";
-    private static final String PREFERENCES_EULA = "eula";
+    private static final String PREFERENCE_EULA_ACCEPTED = "IUNDERSTAND";
+    private static final String PREFERENCES_EULA = "Disclaimer";
     private static AlertDialog aDialog = null;
 
     /**
@@ -63,9 +64,11 @@ public class Eula {
      * @param activity The Activity to finish if the user rejects the EULA.
      * @return Whether the user has agreed already.
      */
-    public static boolean show(final Activity activity) {
-        final SharedPreferences preferences = activity.getSharedPreferences(PREFERENCES_EULA,
-                Activity.MODE_PRIVATE);
+    public static boolean show(final Activity activity, final SharedPreferences preferences ) {
+        //final SharedPreferences preferences = activity.getSharedPreferences(PREFERENCES_EULA,
+        //        Activity.MODE_PRIVATE);
+
+        Map<String, ?> preferencesAll = preferences.getAll();
         if (!preferences.getBoolean(PREFERENCE_EULA_ACCEPTED, false)) {
             final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
             builder.setTitle(R.string.eula_title);
diff --git a/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java b/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java
index e3aad63eee99705c7f79e5d88d64dec1d24059b4..b169ba3b40b815296568c80d642321d7af410ce0 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLReader.java
@@ -4,18 +4,41 @@ import android.util.Log;
 
 import com.nightscout.android.USB.UsbHidDriver;
 import com.nightscout.android.dexcom.USB.HexDump;
+import com.nightscout.android.medtronic.message.BeginEHSMMessage;
 import com.nightscout.android.medtronic.message.ChannelNegotiateMessage;
+import com.nightscout.android.medtronic.message.ChecksumException;
 import com.nightscout.android.medtronic.message.ContourNextLinkBinaryMessage;
+import com.nightscout.android.medtronic.message.ContourNextLinkCommandMessage;
+import com.nightscout.android.medtronic.message.ContourNextLinkMessage;
+import com.nightscout.android.medtronic.message.ContourNextLinkMessageHandler;
+import com.nightscout.android.medtronic.message.EncryptionException;
+import com.nightscout.android.medtronic.message.EndEHSMMessage;
+import com.nightscout.android.medtronic.message.MedtronicMessage;
+import com.nightscout.android.medtronic.message.MessageUtils;
+import com.nightscout.android.medtronic.message.PumpStatusRequestMessage;
+import com.nightscout.android.medtronic.message.PumpStatusResponseMessage;
+import com.nightscout.android.medtronic.message.PumpTimeRequestMessage;
+import com.nightscout.android.medtronic.message.PumpTimeResponseMessage;
+import com.nightscout.android.medtronic.message.UnexpectedMessageException;
 import com.nightscout.android.medtronic.service.MedtronicCNLService;
+import com.nightscout.android.upload.Medtronic640gPumpRecord;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+import java.util.concurrent.TimeoutException;
 
 /**
  * Created by lgoedhart on 24/03/2016.
  */
-public class MedtronicCNLReader {
+public class MedtronicCNLReader implements ContourNextLinkMessageHandler {
 
     private static final String TAG = MedtronicCNLService.class.getSimpleName();
 
@@ -23,15 +46,15 @@ public class MedtronicCNLReader {
     private static final int READ_TIMEOUT_MS = 5000;
     private static final String BAYER_USB_HEADER = "ABC";
 
-    private static final byte[] RADIO_CHANNELS = { 0x14, 0x11, 0x0e, 0x17, 0x1a };
-    public String deviceInfo;
+    private static final byte[] RADIO_CHANNELS = {0x14, 0x11, 0x0e, 0x17, 0x1a};
     private UsbHidDriver mDevice;
     private MedtronicCNLSession mPumpSession = new MedtronicCNLSession();
+
     public MedtronicCNLReader(UsbHidDriver device) {
         mDevice = device;
     }
 
-    public byte[] readMessage() throws IOException {
+    public byte[] readMessage() throws IOException, TimeoutException {
         ByteArrayOutputStream responseMessage = new ByteArrayOutputStream();
 
         byte[] responseBuffer = new byte[USB_BLOCKSIZE];
@@ -40,6 +63,12 @@ public class MedtronicCNLReader {
 
         do {
             bytesRead = mDevice.read(responseBuffer, READ_TIMEOUT_MS);
+
+            if (bytesRead == 0) {
+                throw new TimeoutException("Timeout waiting for response from pump");
+            }
+
+            // Validate the header
             ByteBuffer header = ByteBuffer.allocate(3);
             header.put(responseBuffer, 0, 3);
             String headerString = new String(header.array());
@@ -51,12 +80,30 @@ public class MedtronicCNLReader {
         } while (bytesRead > 0 && (messageSize + 4) == bytesRead);
         // TODO - how to deal with messages that finish on the boundary?
 
+        // FIXME - remove debugging
         String responseString = HexDump.dumpHexString(responseMessage.toByteArray());
         Log.d(TAG, "READ: " + responseString);
 
         return responseMessage.toByteArray();
     }
 
+    @Override
+    public void sendMessage(ContourNextLinkMessage message) throws IOException {
+        sendMessage(message.encode());
+        if (message instanceof ContourNextLinkBinaryMessage) {
+            mPumpSession.incrBayerSequenceNumber();
+        }
+
+        if (message instanceof MedtronicMessage) {
+            mPumpSession.incrMedtronicSequenceNumber();
+        }
+    }
+
+    @Override
+    public ContourNextLinkMessage receiveMessage() {
+        return null;
+    }
+
     public void sendMessage(byte[] message) throws IOException {
 
         int pos = 0;
@@ -76,65 +123,210 @@ public class MedtronicCNLReader {
         }
     }
 
-    public void sendMessage(byte message) throws IOException {
-        byte[] msg = {message};
-        sendMessage(msg);
+    // TODO - get rid of this - it should be in a message decoder
+    private void checkControlMessage(byte[] msg, byte controlCharacter) throws IOException, TimeoutException, UnexpectedMessageException {
+        if (msg.length != 1 || msg[0] != controlCharacter) {
+            throw new UnexpectedMessageException(String.format("Expected to get control character '%d' Got '%d'.",
+                    (int) controlCharacter, (int) msg[0]));
+        }
     }
 
-    private void checkControlMessage(byte controlCharacter) throws IOException {
-        byte[] msg = readMessage();
+    public void requestDeviceInfo() throws IOException, TimeoutException, UnexpectedMessageException {
+        new ContourNextLinkCommandMessage("X").send(this);
 
-        if (msg.length != 1 || msg[0] != controlCharacter) {
-            throw new RuntimeException(String.format("Expected to get an %d control character.", (int) controlCharacter));
+        boolean gotTimeout = false;
+
+        // TODO - parse this into an ASTM record for the device info.
+        try {
+            // The stick will return either the ASTM message, or the ENQ first. The order can change,
+            // so we need to handle both cases
+            byte[] response1 = readMessage();
+            byte[] response2 = readMessage();
+
+            if (response1[0] == ASCII.EOT.value) {
+                // response 1 is the ASTM message
+                checkControlMessage(response2, ASCII.ENQ.value);
+            } else {
+                // response 2 is the ASTM message
+                checkControlMessage(response1, ASCII.ENQ.value);
+            }
+        } catch (TimeoutException e) {
+            // Terminate comms with the pump, then try again
+            new ContourNextLinkCommandMessage(ASCII.EOT.value).send(this);
+            gotTimeout = true;
+        } finally {
+            // If we timed out - try to start the session again.
+            if (gotTimeout) {
+                requestDeviceInfo();
+            }
         }
     }
 
-    public void requestDeviceInfo() throws IOException {
-        sendMessage((byte) 'X');
+    public void enterControlMode() throws IOException, TimeoutException, UnexpectedMessageException {
+        new ContourNextLinkCommandMessage(ASCII.NAK.value).send(this);
+        checkControlMessage(readMessage(), ASCII.EOT.value);
+        new ContourNextLinkCommandMessage(ASCII.ENQ.value).send(this);
+        checkControlMessage(readMessage(), ASCII.ACK.value);
 
-        // TODO - parse this into an ASTM record for the device info.
-        byte[] response = readMessage();
+    }
 
-        checkControlMessage(ASCII.ENQ.value);
+    public void enterPassthroughMode() throws IOException, TimeoutException, UnexpectedMessageException {
+        new ContourNextLinkCommandMessage("W|").send(this);
+        checkControlMessage(readMessage(), ASCII.ACK.value);
+        new ContourNextLinkCommandMessage("Q|").send(this);
+        checkControlMessage(readMessage(), ASCII.ACK.value);
+        new ContourNextLinkCommandMessage("1|").send(this);
+        checkControlMessage(readMessage(), ASCII.ACK.value);
     }
 
-    public void enterControlMode() throws IOException {
-        sendMessage(ASCII.NAK.value);
-        checkControlMessage(ASCII.EOT.value);
-        sendMessage(ASCII.ENQ.value);
-        checkControlMessage(ASCII.ACK.value);
+    public void openConnection() throws IOException, TimeoutException {
+        new ContourNextLinkBinaryMessage(ContourNextLinkBinaryMessage.CommandType.OPEN_CONNECTION, mPumpSession, mPumpSession.getHMAC()).send(this);
+        // FIXME - We need to care what the response message is - wrong MAC and all that
+        readMessage();
+    }
 
+    public void requestReadInfo() throws IOException, TimeoutException {
+        new ContourNextLinkBinaryMessage(ContourNextLinkBinaryMessage.CommandType.READ_INFO, mPumpSession, null).send(this);
+        // FIXME - pull the linkMAC and pumpMAC from here. It needs to go into the session.
+        readMessage();
     }
 
-    public void enterPassthroughMode() throws IOException {
-        sendMessage("W|".getBytes());
-        checkControlMessage(ASCII.ACK.value);
-        sendMessage("Q|".getBytes());
-        checkControlMessage(ASCII.ACK.value);
-        sendMessage("1|".getBytes());
-        checkControlMessage(ASCII.ACK.value);
+    public byte negotiateChannel() throws IOException, ChecksumException, TimeoutException {
+        for (byte channel : RADIO_CHANNELS) {
+            mPumpSession.setRadioChannel(channel);
+            new ChannelNegotiateMessage(mPumpSession).send(this);
+
+            // Don't care what the 0x81 response message is at this stage
+            readMessage();
+            // The 0x80 message
+            ContourNextLinkMessage response = ContourNextLinkBinaryMessage.fromBytes(readMessage());
+            byte[] responseBytes = response.encode();
+
+            if (responseBytes.length > 46) {
+                // Looks promising, let's check the last byte of the payload to make sure
+                if (responseBytes[76] == mPumpSession.getRadioChannel()) {
+                    break;
+                } else {
+                    throw new IOException(String.format("Expected to get a message for channel %d. Got %d", mPumpSession.getRadioChannel(), responseBytes[76]));
+                }
+            } else {
+                mPumpSession.setRadioChannel((byte) 0);
+            }
+        }
+
+        return mPumpSession.getRadioChannel();
     }
 
-    public void openConnection() throws IOException {
-        ContourNextLinkBinaryMessage message = new ContourNextLinkBinaryMessage(ContourNextLinkBinaryMessage.CommandType.OPEN_CONNECTION, mPumpSession, mPumpSession.getHMAC());
-        //message.send(this);
-        sendMessage(message.encode());
-        // FIXME - We need to care what the response message is - wrong MAC and all that
+    public void beginEHSMSession() throws EncryptionException, IOException, TimeoutException {
+        new BeginEHSMMessage(mPumpSession).send(this);
+        // The Begin EHSM Session only has an 0x81 response
         readMessage();
     }
 
-    public void requestReadInfo() throws IOException {
-        ContourNextLinkBinaryMessage message = new ContourNextLinkBinaryMessage(ContourNextLinkBinaryMessage.CommandType.READ_INFO, mPumpSession, null);
-        sendMessage(message.encode());
-        // Don't care what the response message is at this stage
+    public void getPumpTime(Medtronic640gPumpRecord pumpRecord) throws EncryptionException, IOException, ChecksumException, TimeoutException {
+        // FIXME - throw if not in EHSM mode (add a state machine)
+
+        new PumpTimeRequestMessage(mPumpSession).send(this);
+        // Read the 0x81
         readMessage();
+
+        // Read the 0x80
+        ContourNextLinkMessage response = PumpTimeResponseMessage.fromBytes(mPumpSession, readMessage());
+
+        if (response.encode().length < 57) {
+            // Invalid message. Don't try and parse it
+            return;
+        }
+
+        // FIXME - this needs to go into PumpTimeResponseMessage
+        ByteBuffer dateBuffer = ByteBuffer.allocate(8);
+        dateBuffer.order(ByteOrder.BIG_ENDIAN);
+        dateBuffer.put(response.encode(), 61, 8);
+        long rtc = dateBuffer.getInt(0) & 0x00000000ffffffffL;
+        long offset = dateBuffer.getInt(4);
+
+        Date pumpDate = MessageUtils.decodeDateTime(rtc, offset);
+        // FIXME - HAX! Add 1 hour during AEST until we can figure out what Medtronic is doing
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(pumpDate);
+        cal.add(Calendar.HOUR_OF_DAY, 1);
+        pumpDate = cal.getTime();
+        // Set displayTime to be an ISO 8601 date (so that it's parsable).
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
+        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+        pumpRecord.displayTime = dateFormat.format(pumpDate);
+        pumpRecord.pumpDate = pumpDate;
     }
 
-    public void negotiateChannel() throws IOException {
-        for( byte channel: RADIO_CHANNELS ) {
-            ChannelNegotiateMessage message = new ChannelNegotiateMessage( mPumpSession );
-            sendMessage(message.encode());
+    public void getPumpStatus(Medtronic640gPumpRecord pumpRecord) throws IOException, EncryptionException, ChecksumException, TimeoutException {
+        // FIXME - throw if not in EHSM mode (add a state machine)
+
+        new PumpStatusRequestMessage(mPumpSession).send(this);
+        // Read the 0x81
+        readMessage();
+
+        // Read the 0x80
+        ContourNextLinkMessage response = PumpStatusResponseMessage.fromBytes(mPumpSession, readMessage());
+
+        if (response.encode().length < 57) {
+            // Invalid message. Don't try and parse it
+            return;
         }
+
+        // FIXME - this needs to go into PumpStatusResponseMessage
+        ByteBuffer statusBuffer = ByteBuffer.allocate(96);
+        statusBuffer.order(ByteOrder.BIG_ENDIAN);
+        statusBuffer.put(response.encode(), 57, 96);
+
+        // Read the data into the record
+        pumpRecord.activeInsulin = (statusBuffer.getShort(51) & 0x0000ffff) / 10000f;
+        pumpRecord.sensorBGL = statusBuffer.getShort(53) & 0x0000ffff; // In mg/DL. 0 means no CGM reading
+        long rtc;
+        long offset;
+        if( ( pumpRecord.sensorBGL & 0x200 ) == 0x200 ) {
+            // Sensor error. Let's reset. FIXME - solve this more elegantly later
+            pumpRecord.sensorBGL = 0;
+            rtc = 0;
+            offset = 0;
+        } else {
+            rtc = statusBuffer.getInt(55) & 0x00000000ffffffffL;
+            offset = statusBuffer.getInt(59);
+            pumpRecord.setTrend(Medtronic640gPumpRecord.fromMessageByte( statusBuffer.get(64)));
+        }
+        pumpRecord.sensorBGLDate = MessageUtils.decodeDateTime(rtc, offset);
+        // FIXME - HAX! Add 1 hour during AEST until we can figure out what Medtronic is doing
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(pumpRecord.sensorBGLDate);
+        cal.add(Calendar.HOUR_OF_DAY, 1);
+        pumpRecord.sensorBGLDate = cal.getTime();
+        pumpRecord.recentBolusWizard = statusBuffer.get(72) != 0;
+        pumpRecord.bolusWizardBGL = statusBuffer.getShort(73); // In mg/DL
+    }
+
+    public void endEHSMSession() throws EncryptionException, IOException, TimeoutException {
+        new EndEHSMMessage(mPumpSession).send(this);
+        // The End EHSM Session only has an 0x81 response
+        readMessage();
+    }
+
+    public void closeConnection() throws IOException, TimeoutException {
+        new ContourNextLinkBinaryMessage(ContourNextLinkBinaryMessage.CommandType.CLOSE_CONNECTION, mPumpSession, null).send(this);
+        // FIXME - We need to care what the response message is - wrong MAC and all that
+        readMessage();
+    }
+
+    public void endPassthroughMode() throws IOException, TimeoutException, UnexpectedMessageException {
+        new ContourNextLinkCommandMessage("W|").send(this);
+        checkControlMessage(readMessage(), ASCII.ACK.value);
+        new ContourNextLinkCommandMessage("Q|").send(this);
+        checkControlMessage(readMessage(), ASCII.ACK.value);
+        new ContourNextLinkCommandMessage("0|").send(this);
+        checkControlMessage(readMessage(), ASCII.ACK.value);
+    }
+
+    public void endControlMode() throws IOException, TimeoutException, UnexpectedMessageException {
+        new ContourNextLinkCommandMessage(ASCII.EOT.value).send(this);
+        checkControlMessage(readMessage(), ASCII.ENQ.value);
     }
 
     public enum ASCII {
diff --git a/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java b/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java
index da2673197f45cf0367b156adca60d8e46e1c7452..13fe680aeb4b7e973bfe61d7192211b59d9cce93 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/MedtronicCNLSession.java
@@ -6,9 +6,11 @@ import com.nightscout.android.medtronic.message.MessageUtils;
  * Created by lgoedhart on 26/03/2016.
  */
 public class MedtronicCNLSession {
+    // FIXME - Lennart's hard coded key and HMAC
     private final static byte[] HMAC = MessageUtils.hexStringToByteArray("e28fe4e5cf3c1eb6d6a2ec5a093093d4f397237dc60b3f2c1ef64f31e32077c4");
     private final static byte[] KEY = MessageUtils.hexStringToByteArray("57833334130906a587b7a0437bc28a69");
 
+    // FIXME - Lennart's hard coded serial numbers
     private final static long linkMAC = 1055866 + 0x0023F70682000000L;
     private final static long pumpMAC = 1057941 + 0x0023F745EE000000L;
 
@@ -20,12 +22,13 @@ public class MedtronicCNLSession {
         return HMAC;
     }
 
-    public static byte[] getKEY() {
+    public static byte[] getKey() {
         return KEY;
     }
     public byte[] getIV() {
-        byte[] iv = HMAC;
-        iv[0] = (byte) radioChannel;
+        byte[] iv = new byte[KEY.length];
+        System.arraycopy(KEY,0,iv,0,KEY.length);
+        iv[0] = radioChannel;
         return iv;
     }
 
@@ -48,4 +51,16 @@ public class MedtronicCNLSession {
     public byte getRadioChannel() {
         return radioChannel;
     }
+
+    public void incrBayerSequenceNumber() {
+        bayerSequenceNumber++;
+    }
+
+    public void incrMedtronicSequenceNumber() {
+        medtronicSequenceNumber++;
+    }
+
+    public void setRadioChannel(byte radioChannel) {
+        this.radioChannel = radioChannel;
+    }
 }
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/BeginEHSMMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/BeginEHSMMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..14249523f4cca3265448953885feac3117cae07b
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/BeginEHSMMessage.java
@@ -0,0 +1,17 @@
+package com.nightscout.android.medtronic.message;
+
+import com.nightscout.android.medtronic.MedtronicCNLSession;
+
+/**
+ * Created by lgoedhart on 26/03/2016.
+ */
+public class BeginEHSMMessage extends MedtronicSendMessage {
+    public BeginEHSMMessage(MedtronicCNLSession pumpSession) throws EncryptionException {
+        super(SendMessageType.BEGIN_EHSM_SESSION, pumpSession, buildPayload());
+    }
+
+    protected static byte[] buildPayload() {
+        // Not sure what the payload of a null byte means, but it's the same every time.
+        return new byte[] { 0x00 };
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java
index ea4fb47b8d6de79dec3ed2655deaa52136788232..e1889410035b81b2198b56ce314961311985c0be 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/ChannelNegotiateMessage.java
@@ -10,19 +10,21 @@ import java.nio.ByteOrder;
  */
 public class ChannelNegotiateMessage extends MedtronicMessage {
     public ChannelNegotiateMessage(MedtronicCNLSession pumpSession) {
-        super(CommandType.SEND_MESSAGE, CommandAction.CHANNEL_NEGOTIATE, pumpSession);
+        super(CommandType.SEND_MESSAGE, CommandAction.CHANNEL_NEGOTIATE, pumpSession, buildPayload(pumpSession));
+    }
 
+    protected static byte[] buildPayload( MedtronicCNLSession pumpSession ) {
         ByteBuffer payload = ByteBuffer.allocate(26);
         payload.order(ByteOrder.LITTLE_ENDIAN);
         // The MedtronicMessage sequence number is always sent as 1 for this message,
         // even though the sequence should keep incrementing as normal
         payload.put((byte) 1);
-        payload.put(mPumpSession.getRadioChannel());
+        payload.put(pumpSession.getRadioChannel());
         byte[] unknownBytes = {0, 0, 0, 0x07, 0x07, 0, 0, 0x02};
         payload.put(unknownBytes);
-        payload.putLong(mPumpSession.getLinkMAC());
-        payload.putLong(mPumpSession.getPumpMAC());
+        payload.putLong(pumpSession.getLinkMAC());
+        payload.putLong(pumpSession.getPumpMAC());
 
-        setPayload(payload.array());
+        return payload.array();
     }
 }
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java
index b06979f7c25cfa1cf96cf8742617ce6d0ec8cc41..964ed9f24bc06314e26d95e4cc0ca987230708e4 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkBinaryMessage.java
@@ -8,11 +8,11 @@ import java.nio.ByteOrder;
 /**
  * Created by lgoedhart on 26/03/2016.
  */
-public class ContourNextLinkBinaryMessage {
-    protected ByteBuffer mBayerEnvelope;
-    protected ByteBuffer mBayerPayload;
-    protected MedtronicCNLSession mPumpSession;
-    protected CommandType mCommandType = CommandType.NO_TYPE;
+public class ContourNextLinkBinaryMessage extends ContourNextLinkMessage{
+    //protected ByteBuffer mBayerEnvelope;
+    //protected ByteBuffer mBayerPayload;
+    //protected MedtronicCNLSession mPumpSession;
+    //protected CommandType mCommandType = CommandType.NO_TYPE;
 
     static int ENVELOPE_SIZE = 33;
 
@@ -36,64 +36,44 @@ public class ContourNextLinkBinaryMessage {
     }
 
     public ContourNextLinkBinaryMessage(CommandType commandType, MedtronicCNLSession pumpSession, byte[] payload) {
-        mPumpSession = pumpSession;
-
-        setPayload(payload);
+        super(buildPayload(commandType, pumpSession, payload));
     }
 
-    protected void setPayload(byte[] payload) {
-        if( payload != null ) {
-            mBayerPayload = ByteBuffer.allocate( payload.length);
-            mBayerPayload.put(payload);
-        }
+    protected static byte[] buildPayload(CommandType commandType, MedtronicCNLSession pumpSession, byte[] payload) {
+        int payloadLength = payload == null ? 0 : payload.length;
 
-        mBayerEnvelope = ByteBuffer.allocate(ENVELOPE_SIZE);
-        mBayerEnvelope.order(ByteOrder.LITTLE_ENDIAN);
-        mBayerEnvelope.put((byte) 0x51);
-        mBayerEnvelope.put((byte) 0x3);
-        mBayerEnvelope.put("000000".getBytes()); // Text of Pump serial, but 000000 for 640g
+        ByteBuffer payloadBuffer = ByteBuffer.allocate( ENVELOPE_SIZE + payloadLength );
+        payloadBuffer.order(ByteOrder.LITTLE_ENDIAN);
+
+        payloadBuffer.put((byte) 0x51);
+        payloadBuffer.put((byte) 0x3);
+        payloadBuffer.put("000000".getBytes()); // Text of Pump serial, but 000000 for 640g
         byte[] unknownBytes = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-        mBayerEnvelope.put(unknownBytes);
-        mBayerEnvelope.put(mCommandType.value);
-        mBayerEnvelope.putInt(mPumpSession.getBayerSequenceNumber());
+        payloadBuffer.put(unknownBytes);
+        payloadBuffer.put(commandType.value);
+        payloadBuffer.putInt(pumpSession.getBayerSequenceNumber());
         byte[] unknownBytes2 = {0, 0, 0, 0, 0};
-        mBayerEnvelope.put(unknownBytes2);
-        mBayerEnvelope.putInt(mBayerPayload == null ? 0 : mBayerPayload.capacity());
-        mBayerEnvelope.put(messageCrc());
-    }
+        payloadBuffer.put(unknownBytes2);
+        payloadBuffer.putInt(payloadLength);
+        payloadBuffer.put((byte) 0); // Placeholder for the CRC
 
-    private byte messageCrc() {
-        byte sum = MessageUtils.oneByteSum(mBayerEnvelope.array());
-        // Don't include the checkum byte in the checksum calculation!
-        sum -= mBayerEnvelope.get(32);
-        if (mBayerPayload != null) {
-            sum += MessageUtils.oneByteSum(mBayerPayload.array());
+        if( payloadLength != 0 ) {
+            payloadBuffer.put(payload);
         }
-        return sum;
-    }
 
-    public byte[] encode() {
-        if (mBayerPayload != null) {
-            ByteBuffer out = ByteBuffer.allocate(mBayerEnvelope.capacity() + mBayerPayload.capacity());
-            out.put(mBayerEnvelope.array());
-            out.put(mBayerPayload.array());
-            return out.array();
-        } else {
-            return mBayerEnvelope.array();
-        }
+        // Now that we have the payload, calculate the message CRC
+        payloadBuffer.position(32);
+        payloadBuffer.put(MessageUtils.oneByteSum(payloadBuffer.array()));
+
+        return payloadBuffer.array();
     }
 
-    public static ContourNextLinkBinaryMessage fromBytes(byte[] bytes) throws ChecksumException {
-        ContourNextLinkBinaryMessage message = new ContourNextLinkBinaryMessage(CommandType.NO_TYPE, null, null);
-        message.mBayerEnvelope = ByteBuffer.allocate(ENVELOPE_SIZE);
-        message.mBayerEnvelope.put(bytes, 0, ENVELOPE_SIZE);
-        int payloadSize = bytes.length - ENVELOPE_SIZE;
-        message.mBayerPayload = ByteBuffer.allocate( payloadSize);
-        message.mBayerPayload.put(bytes, ENVELOPE_SIZE, payloadSize);
+    public static ContourNextLinkMessage fromBytes(byte[] bytes) throws ChecksumException {
+        ContourNextLinkMessage message = new ContourNextLinkMessage(bytes);
 
         // Validate checksum
-        byte messageChecksum = message.mBayerEnvelope.get(32);
-        byte calculatedChecksum = message.messageCrc();
+        byte messageChecksum = message.mPayload.get(32);
+        byte calculatedChecksum = (byte) (MessageUtils.oneByteSum(message.mPayload.array()) - messageChecksum);
 
         if (messageChecksum != calculatedChecksum) {
             throw new ChecksumException(String.format("Expected to get %d. Got %d", (int) calculatedChecksum, (int) messageChecksum));
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..91021b2847b637946739441c8fe6d6c32886f27c
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkCommandMessage.java
@@ -0,0 +1,16 @@
+package com.nightscout.android.medtronic.message;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Created by lgoedhart on 26/03/2016.
+ */
+public class ContourNextLinkCommandMessage extends ContourNextLinkMessage {
+    public ContourNextLinkCommandMessage(byte command) {
+        super(new byte[]{command});
+    }
+
+    public ContourNextLinkCommandMessage(String command) {
+        super(command.getBytes());
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java
index d964715df6b776d9a23014eeb307cc95dd20a333..3c4a5034872f51390434d845f3ced5387bbbf34c 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessage.java
@@ -1,5 +1,6 @@
 package com.nightscout.android.medtronic.message;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 
 /**
@@ -7,4 +8,25 @@ import java.nio.ByteBuffer;
  */
 public class ContourNextLinkMessage {
     protected ByteBuffer mPayload;
+
+    public ContourNextLinkMessage(byte[] bytes) {
+        if (bytes != null) {
+            this.mPayload = ByteBuffer.allocate(bytes.length);
+            this.mPayload.put(bytes);
+        }
+    }
+
+    public byte[] encode() {
+        return mPayload.array();
+    }
+
+    public void send(ContourNextLinkMessageHandler handler) throws IOException {
+        handler.sendMessage(this);
+    }
+
+    // FIXME - get rid of this - make a Builder instead
+    protected void setPayload(byte[] payload) {
+        mPayload = ByteBuffer.allocate(payload.length);
+        mPayload.put(payload);
+    }
 }
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessageHandler.java b/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessageHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..434a0a9a677867b2a7b5d05181e66d3e6a87abb9
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/ContourNextLinkMessageHandler.java
@@ -0,0 +1,11 @@
+package com.nightscout.android.medtronic.message;
+
+import java.io.IOException;
+
+/**
+ * Created by lgoedhart on 26/03/2016.
+ */
+public interface ContourNextLinkMessageHandler {
+    void sendMessage( ContourNextLinkMessage message ) throws IOException;
+    ContourNextLinkMessage receiveMessage();
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/EncryptionException.java b/app/src/main/java/com/nightscout/android/medtronic/message/EncryptionException.java
new file mode 100644
index 0000000000000000000000000000000000000000..5e867743949b49722ae6ca12cc57dc67ad10c7ac
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/EncryptionException.java
@@ -0,0 +1,10 @@
+package com.nightscout.android.medtronic.message;
+
+/**
+ * Created by lgoedhart on 26/03/2016.
+ */
+public class EncryptionException extends Throwable {
+    public EncryptionException(String message) {
+        super(message);
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/EndEHSMMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/EndEHSMMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..46f119b21b462a974b57a0d83c306dbebf25270e
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/EndEHSMMessage.java
@@ -0,0 +1,17 @@
+package com.nightscout.android.medtronic.message;
+
+import com.nightscout.android.medtronic.MedtronicCNLSession;
+
+/**
+ * Created by lgoedhart on 26/03/2016.
+ */
+public class EndEHSMMessage extends MedtronicSendMessage {
+    public EndEHSMMessage(MedtronicCNLSession pumpSession) throws EncryptionException {
+        super(SendMessageType.END_EHSM_SESSION, pumpSession, buildPayload());
+    }
+
+    protected static byte[] buildPayload() {
+        // Not sure what the payload byte means, but it's the same every time.
+        return new byte[] { 0x01 };
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java
index 61409796000676490bfbefdef2835cf24f31ce5d..d27b36623bac3ebe8b495011fee719aeb1689d35 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicMessage.java
@@ -4,6 +4,16 @@ import com.nightscout.android.medtronic.MedtronicCNLSession;
 
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
 
 /**
  * Created by lgoedhart on 26/03/2016.
@@ -11,7 +21,6 @@ import java.nio.ByteOrder;
 public class MedtronicMessage extends ContourNextLinkBinaryMessage {
     static int ENVELOPE_SIZE = 2;
     static int CRC_SIZE = 2;
-    protected CommandAction mCommandAction = CommandAction.NO_TYPE;
 
     public enum CommandAction {
         NO_TYPE(0x0),
@@ -26,32 +35,68 @@ public class MedtronicMessage extends ContourNextLinkBinaryMessage {
         }
     }
 
-    protected MedtronicMessage(CommandType commandType, CommandAction commandAction, MedtronicCNLSession pumpSession) {
-        super(commandType, pumpSession, null);
-        mCommandAction = commandAction;
+    protected MedtronicMessage(CommandType commandType, CommandAction commandAction, MedtronicCNLSession pumpSession, byte[] payload) {
+        super(commandType, pumpSession, buildPayload(commandAction, payload));
     }
 
-    @Override
-    protected void setPayload(byte[] payload) {
-        /*
-          MedtronicMessage:
-          +---------------+-------------------+----------------------+--------------------+
-          | CommandAction | byte Payload Size | byte[] Payload bytes | LE short CCITT CRC |
-          +---------------+-------------------+----------------------+--------------------+
-         */
-
+    /**
+     * MedtronicMessage:
+     * +---------------+-------------------+----------------------+--------------------+
+     * | CommandAction | byte Payload Size | byte[] Payload bytes | LE short CCITT CRC |
+     * +---------------+-------------------+----------------------+--------------------+
+     */
+    protected static byte[] buildPayload(CommandAction commandAction, byte[] payload) {
         byte payloadLength = (byte) (payload == null ? 0 : payload.length);
 
-        ByteBuffer payloadBuffer = ByteBuffer.allocate( ENVELOPE_SIZE + payloadLength + CRC_SIZE );
+        ByteBuffer payloadBuffer = ByteBuffer.allocate(ENVELOPE_SIZE + payloadLength + CRC_SIZE);
         payloadBuffer.order(ByteOrder.LITTLE_ENDIAN);
 
-        payloadBuffer.put(mCommandAction.value);
-        payloadBuffer.put(payloadLength);
-        if (payloadLength != 0 ) {
-            payloadBuffer.put(payload);
+        payloadBuffer.put(commandAction.value);
+        payloadBuffer.put((byte) (ENVELOPE_SIZE + payloadLength));
+        if (payloadLength != 0) {
+            payloadBuffer.put(payload != null ? payload : new byte[0]);
+        }
+
+        payloadBuffer.putShort((short) MessageUtils.CRC16CCITT(payloadBuffer.array(), 0xffff, 0x1021, ENVELOPE_SIZE + payloadLength));
+
+        return payloadBuffer.array();
+    }
+
+    public static ContourNextLinkMessage fromBytes(byte[] bytes) throws ChecksumException {
+        ContourNextLinkMessage message = ContourNextLinkBinaryMessage.fromBytes(bytes);
+
+        // TODO - Validate the CCITT
+        return message;
+    }
+
+    // TODO - maybe move the SecretKeySpec, IvParameterSpec and Cipher construction into the PumpSession?
+    protected static byte[] encrypt(byte[] key, byte[] iv, byte[] clear) throws EncryptionException {
+        SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
+        IvParameterSpec ivSpec = new IvParameterSpec(iv);
+        byte[] encrypted = new byte[0];
+
+        try {
+            Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding");
+            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivSpec);
+            encrypted = cipher.doFinal(clear);
+        } catch (Exception e) {
+            throw new EncryptionException( "Could not encrypt Medtronic Message" );
         }
-        payloadBuffer.putShort(MessageUtils.ccittChecksum(payloadBuffer.array()));
+        return encrypted;
+    }
+
+    protected static byte[] decrypt(byte[] key, byte[] iv, byte[] encrypted) throws EncryptionException {
+        SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
+        IvParameterSpec ivSpec = new IvParameterSpec(iv);
+        byte[] decrypted;
 
-        super.setPayload( payloadBuffer.array() );
+        try {
+            Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding");
+            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivSpec);
+            decrypted = cipher.doFinal(encrypted);
+        } catch (Exception e ) {
+            throw new EncryptionException( "Could not decrypt Medtronic Message" );
+        }
+        return decrypted;
     }
 }
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicReceiveMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicReceiveMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d7401ab0e0d88287ed2cbbd32c801ae15d771ad
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicReceiveMessage.java
@@ -0,0 +1,64 @@
+package com.nightscout.android.medtronic.message;
+
+import com.nightscout.android.medtronic.MedtronicCNLSession;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Created by lgoedhart on 26/03/2016.
+ */
+public class MedtronicReceiveMessage extends MedtronicMessage {
+    static int ENVELOPE_SIZE = 22;
+    static int ENCRYPTED_ENVELOPE_SIZE = 3;
+    static int CRC_SIZE = 2;
+
+    protected MedtronicReceiveMessage(CommandType commandType, CommandAction commandAction, MedtronicCNLSession pumpSession, byte[] payload) {
+        super(commandType, commandAction, pumpSession, payload);
+    }
+
+    public enum ReceiveMessageType {
+        NO_TYPE(0x0),
+        TIME_RESPONSE(0x407);
+
+        private short value;
+
+        ReceiveMessageType(int messageType) {
+            value = (short) messageType;
+        }
+    }
+
+    /**
+     * MedtronicReceiveMessage:
+     * +------------------+-----------------+-----------------+---------------------------------+-------------------+--------------------------------+
+     * | LE short unknown | LE long pumpMAC | LE long linkMAC | byte[3] responseSequenceNumber? | byte Payload size | byte[] Encrypted Payload bytes |
+     * +------------------+-----------------+-----------------+---------------------------------+-------------------+--------------------------------+
+     * <p/>
+     * MedtronicReceiveMessage (decrypted payload):
+     * +----------------------------+-----------------------------+----------------------+--------------------+
+     * | byte receiveSequenceNumber | BE short receiveMessageType | byte[] Payload bytes | BE short CCITT CRC |
+     * +----------------------------+-----------------------------+----------------------+--------------------+
+     */
+    public static ContourNextLinkMessage fromBytes(MedtronicCNLSession pumpSession, byte[] bytes) throws ChecksumException, EncryptionException {
+        // TODO - turn this into a factory
+        ContourNextLinkMessage message = MedtronicMessage.fromBytes(bytes);
+
+        // TODO - Validate the message, inner CCITT, serial numbers, etc
+
+        // If there's not 57 bytes, then we got back a bad message. Not sure how to process these yet.
+        if( bytes.length >= 57 ) {
+            // Replace the encrypted bytes by their decrypted equivalent (same block size)
+            byte encryptedPayloadSize = bytes[56];
+
+            ByteBuffer encryptedPayload = ByteBuffer.allocate(encryptedPayloadSize);
+            encryptedPayload.put(bytes, 57, encryptedPayloadSize);
+            byte[] decryptedPayload = decrypt(pumpSession.getKey(), pumpSession.getIV(), encryptedPayload.array());
+
+            // Now that we have the decrypted payload, rewind the mPayload, and overwrite the bytes
+            // TODO - because this messes up the existing CCITT, do we want to have a separate buffer for the decrypted payload?
+            // Should be fine provided we check the CCITT first...
+            message.mPayload.position(57);
+            message.mPayload.put(decryptedPayload);
+        }
+        return message;
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicSendMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicSendMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..f187f3dd41b4e89455dca3809a4ac212ba19476f
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/MedtronicSendMessage.java
@@ -0,0 +1,83 @@
+package com.nightscout.android.medtronic.message;
+
+import com.nightscout.android.medtronic.MedtronicCNLSession;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+/**
+ * Created by lgoedhart on 26/03/2016.
+ */
+public class MedtronicSendMessage extends MedtronicMessage {
+    static int ENVELOPE_SIZE = 11;
+    static int ENCRYPTED_ENVELOPE_SIZE = 3;
+    static int CRC_SIZE = 2;
+
+    public enum SendMessageType {
+        NO_TYPE(0x0),
+        BEGIN_EHSM_SESSION(0x412),
+        TIME_REQUEST(0x0403),
+        READ_PUMP_STATUS_REQUEST(0x0112),
+        END_EHSM_SESSION(0x412);
+
+        private short value;
+
+        SendMessageType(int messageType) {
+            value = (short) messageType;
+        }
+    }
+
+    protected MedtronicSendMessage(SendMessageType sendMessageType, MedtronicCNLSession pumpSession, byte[] payload) throws EncryptionException {
+        super(CommandType.SEND_MESSAGE, CommandAction.PUMP_REQUEST, pumpSession, buildPayload(sendMessageType, pumpSession, payload));
+    }
+
+    /**
+     * MedtronicSendMessage:
+     * +-----------------+------------------------------+--------------+-------------------+--------------------------------+
+     * | LE long pumpMAC | byte medtronicSequenceNumber | byte unknown | byte Payload size | byte[] Encrypted Payload bytes |
+     * +-----------------+------------------------------+--------------+-------------------+--------------------------------+
+     * <p/>
+     * MedtronicSendMessage (decrypted payload):
+     * +-------------------------+----------------------+----------------------+--------------------+
+     * | byte sendSequenceNumber | BE short sendMessageType | byte[] Payload bytes | BE short CCITT CRC |
+     * +-------------------------+----------------------+----------------------+--------------------+
+     */
+    protected static byte[] buildPayload(SendMessageType sendMessageType, MedtronicCNLSession pumpSession, byte[] payload) throws EncryptionException {
+        byte payloadLength = (byte) (payload == null ? 0 : payload.length);
+
+        ByteBuffer sendPayloadBuffer = ByteBuffer.allocate(ENCRYPTED_ENVELOPE_SIZE + payloadLength + CRC_SIZE);
+        sendPayloadBuffer.order(ByteOrder.BIG_ENDIAN); // I know, this is the default - just being explicit
+
+        sendPayloadBuffer.put(sendSequenceNumber(sendMessageType));
+        sendPayloadBuffer.putShort(sendMessageType.value);
+        if (payloadLength != 0) {
+            sendPayloadBuffer.put(payload);
+        }
+
+        sendPayloadBuffer.putShort((short) MessageUtils.CRC16CCITT(sendPayloadBuffer.array(), 0xffff, 0x1021, ENCRYPTED_ENVELOPE_SIZE + payloadLength));
+
+        ByteBuffer payloadBuffer = ByteBuffer.allocate( ENVELOPE_SIZE + sendPayloadBuffer.capacity() );
+        payloadBuffer.order(ByteOrder.LITTLE_ENDIAN);
+
+        payloadBuffer.putLong(pumpSession.getPumpMAC());
+        payloadBuffer.put((byte) pumpSession.getMedtronicSequenceNumber());
+        payloadBuffer.put((byte) 0x10);
+        payloadBuffer.put((byte) sendPayloadBuffer.capacity());
+        payloadBuffer.put(encrypt( pumpSession.getKey(), pumpSession.getIV(), sendPayloadBuffer.array()));
+
+        return payloadBuffer.array();
+    }
+
+    protected static byte sendSequenceNumber(SendMessageType sendMessageType) {
+        switch (sendMessageType) {
+            case BEGIN_EHSM_SESSION:
+                return (byte) 0x80;
+            case TIME_REQUEST:
+                return (byte) 0x02;
+            case READ_PUMP_STATUS_REQUEST:
+                return (byte) 0x03;
+            default:
+                return 0x00;
+        }
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/MessageHandler.java b/app/src/main/java/com/nightscout/android/medtronic/message/MessageHandler.java
deleted file mode 100644
index 7d1f0ef5975d768f3984afb84ddb4f30265bae71..0000000000000000000000000000000000000000
--- a/app/src/main/java/com/nightscout/android/medtronic/message/MessageHandler.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.nightscout.android.medtronic.message;
-
-/**
- * Created by lgoedhart on 26/03/2016.
- */
-public interface MessageHandler {
-    void send( ContourNextLinkMessage message );
-    ContourNextLinkMessage receive();
-}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java b/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java
index f06da4b9ee1b60b4cf7fada4f6b82f28d6dabf91..aaf21d7558b48d2cf65547329a231de0b85c8fe2 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/MessageUtils.java
@@ -1,5 +1,9 @@
 package com.nightscout.android.medtronic.message;
 
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
 /**
  * Created by lgoedhart on 26/03/2016.
  */
@@ -14,32 +18,20 @@ public class MessageUtils {
         return sum;
     }
 
-    static public short ccittChecksum(byte[] bytes) {
-        // From http://stackoverflow.com/questions/7961964/android-crc-ccitt
-        short crc = (short) 0xFFFF;
-        int temp;
-        int crc_byte;
-
-        for (int byte_index = 0; byte_index < bytes.length; byte_index++) {
-            crc_byte = bytes[byte_index];
-
-            for (int bit_index = 0; bit_index < 8; bit_index++) {
-
-                temp = ((crc >> 15)) ^ ((crc_byte >> 7));
-
+    public static int CRC16CCITT(byte[] data, int initialValue, int polynomial, int bytesToCheck) {
+        // From http://introcs.cs.princeton.edu/java/61data/CRC16CCITT.java
+        int crc = initialValue;
+        for (int c = 0; c < bytesToCheck; c++) {
+            byte b = data[c];
+            for (int i = 0; i < 8; i++) {
+                boolean bit = ((b >> (7 - i) & 1) == 1);
+                boolean c15 = ((crc >> 15 & 1) == 1);
                 crc <<= 1;
-                crc &= 0xFFFF;
-
-                if (temp > 0) {
-                    crc ^= 0x1021;
-                    crc &= 0xFFFF;
-                }
-
-                crc_byte <<= 1;
-                crc_byte &= 0xFF;
+                if (c15 ^ bit) crc ^= polynomial;
             }
         }
 
+        crc &= 0xffff;
         return crc;
     }
 
@@ -52,4 +44,15 @@ public class MessageUtils {
         }
         return data;
     }
+
+    public static Date decodeDateTime( long rtc, long offset ) {
+        TimeZone currentTz = java.util.Calendar.getInstance().getTimeZone();
+        GregorianCalendar gregorianCalendar = new GregorianCalendar(2000, 0, 1, 0, 0, 0);
+        gregorianCalendar.setTimeZone(currentTz);
+
+        long epochTime = gregorianCalendar.getTime().getTime();
+
+        Date pumpDate = new Date(epochTime + (( rtc + offset ) * 1000 ) );
+        return pumpDate;
+    }
 }
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusRequestMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusRequestMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..4d2e4e8a5888048a8bf4e62f7ebec5606f608da3
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusRequestMessage.java
@@ -0,0 +1,12 @@
+package com.nightscout.android.medtronic.message;
+
+import com.nightscout.android.medtronic.MedtronicCNLSession;
+
+/**
+ * Created by lgoedhart on 26/03/2016.
+ */
+public class PumpStatusRequestMessage extends MedtronicSendMessage {
+    public PumpStatusRequestMessage(MedtronicCNLSession pumpSession) throws EncryptionException {
+        super(SendMessageType.READ_PUMP_STATUS_REQUEST, pumpSession, null);
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusResponseMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusResponseMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..bc31af2a125725d35c516fa2502b6e57012d8523
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/PumpStatusResponseMessage.java
@@ -0,0 +1,21 @@
+package com.nightscout.android.medtronic.message;
+
+import com.nightscout.android.medtronic.MedtronicCNLSession;
+
+/**
+ * Created by lgoedhart on 27/03/2016.
+ */
+public class PumpStatusResponseMessage extends MedtronicReceiveMessage {
+    protected PumpStatusResponseMessage(CommandType commandType, CommandAction commandAction, MedtronicCNLSession pumpSession, byte[] payload) {
+        super(commandType, commandAction, pumpSession, payload);
+    }
+
+    public static ContourNextLinkMessage fromBytes(MedtronicCNLSession pumpSession, byte[] bytes) throws ChecksumException, EncryptionException {
+        // TODO - turn this into a factory
+        ContourNextLinkMessage message = MedtronicReceiveMessage.fromBytes(pumpSession, bytes);
+
+        // TODO - Validate the MessageType
+
+        return message;
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeRequestMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeRequestMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..abcb9e75ed2940fd69aae122ff647b8caaae8716
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeRequestMessage.java
@@ -0,0 +1,12 @@
+package com.nightscout.android.medtronic.message;
+
+import com.nightscout.android.medtronic.MedtronicCNLSession;
+
+/**
+ * Created by lgoedhart on 26/03/2016.
+ */
+public class PumpTimeRequestMessage extends MedtronicSendMessage {
+    public PumpTimeRequestMessage(MedtronicCNLSession pumpSession) throws EncryptionException {
+        super(SendMessageType.TIME_REQUEST, pumpSession, null);
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeResponseMessage.java b/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeResponseMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..410e54efdf34b897e573d69363e8c38946bf39da
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/PumpTimeResponseMessage.java
@@ -0,0 +1,24 @@
+package com.nightscout.android.medtronic.message;
+
+import com.nightscout.android.medtronic.MedtronicCNLSession;
+
+import java.nio.ByteBuffer;
+import java.util.Date;
+
+/**
+ * Created by lgoedhart on 27/03/2016.
+ */
+public class PumpTimeResponseMessage extends MedtronicReceiveMessage {
+    protected PumpTimeResponseMessage(CommandType commandType, CommandAction commandAction, MedtronicCNLSession pumpSession, byte[] payload) {
+        super(commandType, commandAction, pumpSession, payload);
+    }
+
+    public static ContourNextLinkMessage fromBytes(MedtronicCNLSession pumpSession, byte[] bytes) throws ChecksumException, EncryptionException {
+        // TODO - turn this into a factory
+        ContourNextLinkMessage message = MedtronicReceiveMessage.fromBytes(pumpSession, bytes);
+
+        // TODO - Validate the MessageType
+
+        return message;
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/message/UnexpectedMessageException.java b/app/src/main/java/com/nightscout/android/medtronic/message/UnexpectedMessageException.java
new file mode 100644
index 0000000000000000000000000000000000000000..0fe4e94ec1fad4de52637d937e63471c6321578c
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/medtronic/message/UnexpectedMessageException.java
@@ -0,0 +1,10 @@
+package com.nightscout.android.medtronic.message;
+
+/**
+ * Created by lgoedhart on 26/03/2016.
+ */
+public class UnexpectedMessageException extends Throwable {
+    public UnexpectedMessageException(String message) {
+        super(message);
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java b/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java
index c15e399206d5aa9a14ff7103c68c4428348e7013..ae82286262804267165f6369ea80a6169391157d 100644
--- a/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java
+++ b/app/src/main/java/com/nightscout/android/medtronic/service/MedtronicCNLService.java
@@ -3,7 +3,9 @@ package com.nightscout.android.medtronic.service;
 import android.annotation.SuppressLint;
 import android.app.Notification;
 import android.app.NotificationManager;
+import android.app.PendingIntent;
 import android.content.Context;
+import android.content.Intent;
 import android.content.SharedPreferences;
 import android.graphics.BitmapFactory;
 import android.hardware.usb.UsbManager;
@@ -15,25 +17,30 @@ import android.os.Handler;
 import android.os.Message;
 import android.preference.PreferenceManager;
 import android.util.Log;
-import android.view.Gravity;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import android.widget.Toast;
 
 import com.nightscout.android.R;
 import com.nightscout.android.USB.UsbHidDriver;
+import com.nightscout.android.dexcom.DexcomG4Activity;
 import com.nightscout.android.medtronic.MedtronicCNLReader;
+import com.nightscout.android.medtronic.message.ChecksumException;
+import com.nightscout.android.medtronic.message.EncryptionException;
+import com.nightscout.android.medtronic.message.UnexpectedMessageException;
 import com.nightscout.android.service.AbstractService;
+import com.nightscout.android.upload.Medtronic640gPumpRecord;
 import com.nightscout.android.upload.UploadHelper;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 import java.util.Timer;
 import java.util.TimerTask;
+import java.util.concurrent.TimeoutException;
 
 @SuppressLint("NewApi")
 public class MedtronicCNLService extends AbstractService {
-    public static final int MSG_STATUS = 1;
-
     public final static int USB_VID = 0x1a79;
     public final static int USB_PID = 0x6210;
 
@@ -46,6 +53,7 @@ public class MedtronicCNLService extends AbstractService {
     private UploadHelper mUploader;
     private WifiManager mWifiManager;
     private UsbManager mUsbManager;
+    private SharedPreferences prefs;
 
     @Override
     public void onStartService() {
@@ -53,12 +61,15 @@ public class MedtronicCNLService extends AbstractService {
         mContext = this.getBaseContext();
         mWifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
         mUsbManager = (UsbManager) this.getSystemService(Context.USB_SERVICE);
+        prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
 
+        // Add a small start delay - for some reason, having no start delay causes initial
+        // binding/rendering issues
         mTimer.scheduleAtFixedRate(new TimerTask() {
             public void run() {
                 doReadAndUpload();
             }
-        }, 0, FIVE_MINS_MS);
+        }, 250, FIVE_MINS_MS);
     }
 
     @Override
@@ -84,17 +95,26 @@ public class MedtronicCNLService extends AbstractService {
 
     @Override
     public void onReceiveMessage(Message msg) {
-
     }
 
     protected void doReadAndUpload() {
         mUploader = new UploadHelper(getBaseContext());
         mHidDevice = UsbHidDriver.acquire(mUsbManager, USB_VID, USB_PID);
 
-        if( !isOnline() ) {
-            displayMessage("NET connection error");
-        } else if ( mHidDevice == null ) {
-            displayMessage("CNL connection error");
+        // Load the initial data to the display
+        Medtronic640gPumpRecord pumpRecord = loadData();
+        send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_DATA, pumpRecord));
+
+        if (!isOnline()) {
+            String title = "Internet connection error";
+            String msg = "Please check that you're connected to the Internet";
+            //showNotification(title, msg);
+            send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, title + "\n" + msg));
+        } else if (mHidDevice == null) {
+            String title = "USB connection error";
+            String msg = "Is the Bayer Contour NextLink plugged in?";
+            //showNotification(title, msg);
+            send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, title + "\n" + msg));
         } else {
             try {
                 mHidDevice.open();
@@ -108,18 +128,46 @@ public class MedtronicCNLService extends AbstractService {
             SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
 
             try {
-                send(Message.obtain(null, MSG_STATUS, "Connecting to the Contour CareLink Next..."));
+                send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_STATUS, "Connecting to the Contour CareLink Next..."));
                 cnlReader.requestDeviceInfo();
                 cnlReader.enterControlMode();
                 cnlReader.enterPassthroughMode();
                 cnlReader.openConnection();
                 cnlReader.requestReadInfo();
-                send(Message.obtain(null, MSG_STATUS, "Connected to Contour CareLink Next."));
+                byte radioChannel = cnlReader.negotiateChannel();
+                if (radioChannel == 0) {
+                    send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Could not communicate with the 640g. Are you near the pump?"));
+                } else {
+                    send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_STATUS, String.format("Connected to Contour CareLink Next on channel %d.", (int) radioChannel)));
+                    cnlReader.beginEHSMSession();
+
+                    cnlReader.getPumpTime(pumpRecord);
+                    cnlReader.getPumpStatus(pumpRecord);
+                    writeData(pumpRecord);
+                    send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_DATA, pumpRecord));
+                    cnlReader.endEHSMSession();
+                }
+                cnlReader.closeConnection();
+                cnlReader.endPassthroughMode();
+                cnlReader.endControlMode();
             } catch (IOException e) {
                 Log.e(TAG, "Error getting BGLs", e);
+                send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Error connecting to Contour CareLink Next."));
+            } catch (ChecksumException e) {
+                Log.e(TAG, "Checksum error", e);
+                send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Checksum error getting message from the Contour CareLink Next."));
+            } catch (EncryptionException e) {
+                Log.e(TAG, "Encryption exception", e);
+                send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Error decrypting messages from Contour CareLink Next."));
+            } catch (TimeoutException e) {
+                Log.e(TAG, "Timeout communicating with Contour", e);
+                send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Timeout communicating with the Contour CareLink Next."));
+            } catch (UnexpectedMessageException e) {
+                Log.e(TAG, "Unexpected Message", e);
+                send(Message.obtain(null, DexcomG4Activity.DexcomG4ActivityHandler.MSG_ERROR, "Communication Error: " + e.getMessage()));
             }
 
-            //mUploader.execute(dexcomReader.mRD[dexcomReader.mRD.length - 1]);
+            mUploader.execute(pumpRecord);
 
             if (prefs.getBoolean("EnableWifiHack", false)) {
                 doWifiHack();
@@ -164,39 +212,57 @@ public class MedtronicCNLService extends AbstractService {
         return netInfo != null && netInfo.isConnectedOrConnecting();
     }
 
-    private void displayMessage(String message) {
-        Toast toast = Toast.makeText(getBaseContext(), message, Toast.LENGTH_LONG);
-        toast.setGravity(Gravity.CENTER, 0, 0);
-        LinearLayout toastLayout = (LinearLayout) toast.getView();
-        TextView toastTV = (TextView) toastLayout.getChildAt(0);
-        if (toastTV != null) {
-            toastTV.setTextSize(20);
-            toastTV.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
-        }
-        toast.show();
-    }
-
-    private void showNotification() {
+    private void showNotification(String title, String message) {
         nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
 
-        // In this sample, we'll use the same text for the ticker and the expanded notification
-        // Set the icon, scrolling text and timestamp
         // The PendingIntent to launch our activity if the user selects this notification
-        // Set the info for the views that show in the notification panel.
-
-        String text = "Test service, yo";
-
         nm = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, DexcomG4Activity.class), 0);
         Notification n = new Notification.Builder(mContext)
                 .setDefaults(Notification.DEFAULT_ALL)
-                .setContentTitle("Devices time mismatch!")
+                .setContentTitle(title)
                 .setStyle(new Notification.BigTextStyle()
-                        .bigText(text))
-                .setContentText("Check that devices times match")
-                .setTicker("Devices time mismatch!")
-                .setSmallIcon(R.drawable.ic_action_warning)
+                        .bigText(message))
+                .setContentText(message)
+                .setTicker(message)
+                        //.setSmallIcon(R.drawable.ic_action_warning)
+                .setSmallIcon(R.drawable.ic_launcher)
                 .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
+                .setContentIntent(contentIntent)
                 .getNotification();
         nm.notify(R.string.app_name, n);
     }
+
+    private void writeData(Medtronic640gPumpRecord mostRecentData) {
+        //Write most recent data
+        try {
+            Context context = getBaseContext();
+            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File(context.getFilesDir(), "save.bin"))); //Select where you wish to save the file...
+            oos.writeObject(mostRecentData); // write the class as an 'object'
+            oos.flush(); // flush the stream to insure all of the information was written to 'save.bin'
+            oos.close();// close the stream
+        } catch (Exception e) {
+            Log.e(TAG, "write to OutputStream failed", e);
+        }
+    }
+
+    private Medtronic640gPumpRecord loadData() {
+        ObjectInputStream ois = null;
+        try {
+            Context context = getBaseContext();
+            ois = new ObjectInputStream(new FileInputStream(new File(context.getFilesDir(), "save.bin")));
+            Object o = ois.readObject();
+            ois.close();
+            return (Medtronic640gPumpRecord) o;
+        } catch (Exception ex) {
+            Log.w(TAG, " unable to load Medtronic640g data");
+            try {
+                if (ois != null)
+                    ois.close();
+            } catch (Exception e) {
+                Log.e(TAG, " Error closing ObjectInputStream");
+            }
+        }
+        return new Medtronic640gPumpRecord();
+    }
 }
diff --git a/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java b/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java
index a4fa9f56049f08dafa19205b3a435150be0b1bee..0a62144e04eda68115f8925811136c4f032d94bc 100644
--- a/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java
+++ b/app/src/main/java/com/nightscout/android/settings/SettingsFragment.java
@@ -76,80 +76,10 @@ public class SettingsFragment extends PreferenceFragment implements OnSharedPref
     }
     
     private void addMedtronicOptionsListener(){
-         final ListPreference mon_type = (ListPreference)findPreference("monitor_type");
-         final EditTextPreference med_id = (EditTextPreference)findPreference("medtronic_cgm_id");
-         final EditTextPreference gluc_id = (EditTextPreference)findPreference("glucometer_cgm_id");
-         final EditTextPreference sensor_id = (EditTextPreference)findPreference("sensor_cgm_id");
-         final ListPreference calib_type = (ListPreference)findPreference("calibrationType");
-         final ListPreference pumpPeriod = (ListPreference)findPreference("pumpPeriod");
-         final ListPreference glucSrcType = (ListPreference)findPreference("glucSrcTypes");
-         final ListPreference historicPeriod = (ListPreference)findPreference("historicPeriod");
-         final ListPreference historicMixPeriod = (ListPreference)findPreference("historicMixPeriod");
          final SwitchPreference enableRest = (SwitchPreference)findPreference("EnableRESTUpload");
-         final SwitchPreference enableMongo = (SwitchPreference)findPreference("EnableMongoUpload");
          enableRest.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            public boolean onPreferenceChange(Preference preference, Object newValue) {
              final Boolean val = (Boolean)newValue;
-             if (enableMongo.isChecked() == val && val)
-            	 enableMongo.setChecked(!val);
-             return true;
-           }
-         });
-         enableMongo.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
-             public boolean onPreferenceChange(Preference preference, Object newValue) {
-               final Boolean val = (Boolean)newValue;
-               if (enableRest.isChecked() == val && val)
-              	 enableRest.setChecked(!val);
-               return true;
-             }
-           });
-         int index = mon_type.findIndexOfValue(mon_type.getValue());
-         int index2 = calib_type.findIndexOfValue(calib_type.getValue());
-         if(index==1){
-             med_id.setEnabled(true);
-             gluc_id.setEnabled(true);
-             sensor_id.setEnabled(true);
-         }else{
-            med_id.setEnabled(false);
-            gluc_id.setEnabled(false);
-            sensor_id.setEnabled(false);
-         }
-         index = glucSrcType.findIndexOfValue(glucSrcType.getValue());
-         
-        
-         calib_type.setEnabled(med_id.isEnabled());
-         pumpPeriod.setEnabled(index2==1);
-         glucSrcType.setEnabled(med_id.isEnabled());
-         historicPeriod.setEnabled(index==1 && med_id.isEnabled() );
-         historicMixPeriod.setEnabled(index==2 && med_id.isEnabled() );
-         glucSrcType.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
-             public boolean onPreferenceChange(Preference preference, Object newValue) {
-            	 final String val = newValue.toString();
-                 int index = glucSrcType.findIndexOfValue(val);
-                 historicPeriod.setEnabled(index==1 && med_id.isEnabled());
-                 historicMixPeriod.setEnabled(index==2 && med_id.isEnabled() );
-                 return true; 
-             }
-         });
-         mon_type.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
-           public boolean onPreferenceChange(Preference preference, Object newValue) {
-             final String val = newValue.toString();
-             int index = mon_type.findIndexOfValue(val);
-             if(index==1){
-                 med_id.setEnabled(true);
-                 gluc_id.setEnabled(true);
-                 sensor_id.setEnabled(true);
-             }else{
-                med_id.setEnabled(false);
-                gluc_id.setEnabled(false);
-                sensor_id.setEnabled(false);
-             }
-             index = glucSrcType.findIndexOfValue(glucSrcType.getValue());
-             calib_type.setEnabled(med_id.isEnabled());
-             pumpPeriod.setEnabled(med_id.isEnabled());
-             glucSrcType.setEnabled(med_id.isEnabled());
-             historicPeriod.setEnabled(index==1 && med_id.isEnabled());
-             historicMixPeriod.setEnabled(index==2 && med_id.isEnabled() );
              return true;
            }
          });
diff --git a/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java b/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ad7c2d471901c22748c92931f6ae8a6e7cb976c
--- /dev/null
+++ b/app/src/main/java/com/nightscout/android/upload/Medtronic640gPumpRecord.java
@@ -0,0 +1,112 @@
+package com.nightscout.android.upload;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by lgoedhart on 27/03/2016.
+ */
+public class Medtronic640gPumpRecord extends DeviceRecord implements Serializable {
+    public enum TREND {
+        NONE(0),
+        DOUBLE_UP(1),
+        SINGLE_UP(2),
+        FOURTY_FIVE_UP(3),
+        FLAT(4),
+        FOURTY_FIVE_DOWN(5),
+        SINGLE_DOWN(6),
+        DOUBLE_DOWN(7),
+        NOT_COMPUTABLE(8),
+        RATE_OUT_OF_RANGE(9),
+        NOT_SET(10);
+
+        private byte value;
+        TREND(int trend) {
+           this.value = (byte)value;
+        }
+    }
+    public String alarm = "---"; // Not sure where this is yet
+    public String temporaryBasal = "---"; // Not sure where this is yet
+    public String batteryPercentage = "---";
+    public String batteryVoltage = "---"; // Available?
+    public String model = "---"; // Available?
+    private TREND trend = TREND.NOT_SET;
+
+    public Date pumpDate = new Date(); // Store as a date, so we can parse to string later.
+    public float activeInsulin = 0f;
+    public int sensorBGL = 0; // in mg/dL. 0 means no sensor reading
+    public Date sensorBGLDate = new Date();
+    public boolean recentBolusWizard = false; // Whether a bolus wizard has been run recently
+    public int bolusWizardBGL = 0; // in mg/dL. 0 means no recent bolus wizard reading.
+    public String direction;
+
+    public Medtronic640gPumpRecord() {
+        // TODO - Add serial number
+        this.deviceName = "medtronic-640g";
+    }
+
+    public void setTrend( TREND trend ) {
+        this.trend = trend;
+
+        switch( trend ) {
+            case NONE:
+                this.direction = "NONE";
+                break;
+            case DOUBLE_UP:
+                this.direction = "DoubleUp";
+                break;
+            case SINGLE_UP:
+                this.direction = "SingleUp";
+                break;
+            case FOURTY_FIVE_UP:
+                this.direction = "FortyFiveUp";
+                break;
+            case FLAT:
+                this.direction = "Flat";
+                break;
+            case FOURTY_FIVE_DOWN:
+                this.direction = "FortyFiveDown";
+                break;
+            case SINGLE_DOWN:
+                this.direction = "SingleDown";
+                break;
+            case DOUBLE_DOWN:
+                this.direction = "DoubleDown";
+                break;
+            case NOT_COMPUTABLE:
+                this.direction = "NOT COMPUTABLE";
+                break;
+            case RATE_OUT_OF_RANGE:
+                this.direction = "RATE OUT OF RANGE";
+                break;
+            case NOT_SET:
+                this.direction = "NONE";
+                break;
+        }
+    }
+
+    public TREND getTrend() {
+        return trend;
+    }
+
+    public static TREND fromMessageByte(byte messageByte) {
+        switch( messageByte ) {
+            case (byte) 0x60:
+                return TREND.FLAT;
+            case (byte) 0xc0:
+                return TREND.DOUBLE_UP;
+            case (byte) 0xa0:
+                return TREND.SINGLE_UP;
+            case (byte) 0x80:
+                return TREND.FOURTY_FIVE_UP;
+            case (byte) 0x40:
+                return TREND.FOURTY_FIVE_DOWN;
+            case (byte) 0x20:
+                return TREND.SINGLE_DOWN;
+            case (byte) 0x00:
+                return TREND.DOUBLE_DOWN;
+            default:
+                return TREND.NOT_COMPUTABLE;
+        }
+    }
+}
diff --git a/app/src/main/java/com/nightscout/android/upload/UploadHelper.java b/app/src/main/java/com/nightscout/android/upload/UploadHelper.java
index b6391368fc5d5e8ee615b531b95c45ef838820e6..eedd8337b0ecac8dc92ccfaccaad6c19d9378a6f 100644
--- a/app/src/main/java/com/nightscout/android/upload/UploadHelper.java
+++ b/app/src/main/java/com/nightscout/android/upload/UploadHelper.java
@@ -1,24 +1,27 @@
 package com.nightscout.android.upload;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.security.MessageDigest;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-
-import javax.crypto.spec.GCMParameterSpec;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import android.preference.PreferenceManager;
+import android.util.Log;
 
-import static com.mongodb.client.model.Filters.*;
+import com.mongodb.MongoClient;
+import com.mongodb.MongoClientOptions;
+import com.mongodb.MongoClientOptions.Builder;
+import com.mongodb.MongoCredential;
+import com.mongodb.ServerAddress;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoCursor;
+import com.mongodb.client.MongoDatabase;
+import com.nightscout.android.dexcom.DexcomG4Activity;
+import com.nightscout.android.dexcom.EGVRecord;
+import com.nightscout.android.medtronic.MedtronicConstants;
+import com.nightscout.android.medtronic.MedtronicReader;
 
 import org.apache.http.HttpResponse;
 import org.apache.http.client.ClientProtocolException;
@@ -33,45 +36,30 @@ import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.http.params.BasicHttpParams;
 import org.apache.http.params.HttpConnectionParams;
 import org.apache.http.params.HttpParams;
-import org.bson.BsonDocument;
 import org.bson.Document;
 import org.json.JSONArray;
 import org.json.JSONObject;
-
 import org.slf4j.LoggerFactory;
 
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.RemoteException;
-import android.preference.PreferenceManager;
-import android.util.Log;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.security.MessageDigest;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
 
 import ch.qos.logback.classic.Logger;
-import ch.qos.logback.core.status.WarnStatus;
 
-import com.mongodb.BasicDBObject;
-import com.mongodb.DB;
-import com.mongodb.DBCollection;
-import com.mongodb.DBCursor;
-import com.mongodb.DBObject;
-import com.mongodb.MongoClient;
-import com.mongodb.MongoClientOptions;
-import com.mongodb.MongoClientOptions.Builder;
-import com.mongodb.client.FindIterable;
-import com.mongodb.client.MongoCollection;
-import com.mongodb.client.MongoCursor;
-import com.mongodb.client.MongoDatabase;
-import com.mongodb.MongoCredential;
-import com.mongodb.ServerAddress;
-import com.mongodb.WriteConcern;
-import com.nightscout.android.dexcom.DexcomG4Activity;
-import com.nightscout.android.dexcom.EGVRecord;
-import com.nightscout.android.medtronic.MedtronicConstants;
-import com.nightscout.android.medtronic.MedtronicReader;
+import static com.mongodb.client.model.Filters.eq;
 
 public class UploadHelper extends AsyncTask<Record, Integer, Long> {
 	
@@ -212,7 +200,6 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> {
     /**
      * Sends an error message to be printed in the display (DEBUG) if it is repeated, It is not printed again. If UI is not visible, It will launch a pop-up message.
      * @param valuetosend
-     * @param clear, if true, the display is cleared before printing "valuetosend"
      */
 	private void sendErrorMessageToUI(String valuetosend) {
 		Log.e("medtronicCGMService", valuetosend);
@@ -697,14 +684,25 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> {
     }
     
     private void populateV1APIEntry(JSONObject json, Record oRecord) throws Exception {
-    	Date date = DATE_FORMAT.parse(oRecord.displayTime);
-    	json.put("date", date.getTime());
+		if (oRecord instanceof Medtronic640gPumpRecord) {
+			json.put("date", ((Medtronic640gPumpRecord) oRecord).sensorBGLDate.getTime());
+			json.put("dateString",  oRecord.displayTime);
+		} else {
+			Date date = DATE_FORMAT.parse(oRecord.displayTime);
+			json.put("date", date.getTime());
+		}
 
-    	if (oRecord instanceof GlucometerRecord){
-    		 json.put("gdValue", ((GlucometerRecord)oRecord).numGlucometerValue);
-             json.put("device", getSelectedDeviceName());
-             json.put("type", "mbg");
-             json.put("mbg", ((GlucometerRecord)oRecord).numGlucometerValue);
+    	if (oRecord instanceof GlucometerRecord) {
+			json.put("gdValue", ((GlucometerRecord) oRecord).numGlucometerValue);
+			json.put("device", getSelectedDeviceName());
+			json.put("type", "mbg");
+			json.put("mbg", ((GlucometerRecord) oRecord).numGlucometerValue);
+		}else if (oRecord instanceof Medtronic640gPumpRecord){
+				Medtronic640gPumpRecord pumpRecord = (Medtronic640gPumpRecord) oRecord;
+				json.put("sgv", pumpRecord.sensorBGL);
+				json.put("direction", pumpRecord.direction);
+				json.put("device", pumpRecord.getDeviceName());
+				json.put("type", "sgv");
     	}else if (oRecord instanceof EGVRecord){
     		EGVRecord record = (EGVRecord) oRecord;
     		json.put("device", getSelectedDeviceName());
diff --git a/app/src/main/res/layout/adb.xml b/app/src/main/res/layout/adb.xml
index 6ab863afa8949f85884be968f341898c91c5973d..b5cef5f761be91ea41b848966b7745de295b4e9c 100644
--- a/app/src/main/res/layout/adb.xml
+++ b/app/src/main/res/layout/adb.xml
@@ -2,15 +2,15 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
-    android:orientation="vertical" >
+    android:orientation="vertical"
+    android:paddingTop="15dp">
     
 
     <TextView
         android:id="@+id/demoTitle"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_centerInParent="true"
-        android:textSize="50px"
+        android:textSize="70sp"
         android:gravity="center"
 		android:textStyle="bold"
  
@@ -19,15 +19,16 @@
     <ScrollView
         android:id="@+id/demoScroller"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content" >
+        android:layout_height="wrap_content"
+        android:padding="10dp">
 
         <TextView
             android:id="@+id/demoText"
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:textSize="40px"
+            android:layout_height="wrap_content"
+            android:textSize="30sp"
 			
- 			android:gravity="center" />
+ 			android:gravity="left" />
     </ScrollView>
       <LinearLayout android:id="@+id/container"
       android:orientation="vertical"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9d418e5058df66201e4f9e24ac2859d85327c9c1..13c01b25386527ce439dfdbb0f3189da74475e6b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 
-    <string name="hello">Hello World, DemoActivity!</string>
+    <string name="hello">---</string>
     <string name="app_name">NightScout</string>
     <string name="hello_world">Hello world!</string>
     <string name="action_settings">Settings</string>
@@ -28,8 +28,6 @@
     <item name="android:shadowRadius">2</item>
 	</style>
 	<string-array name="types">
-     <item>Dexcom G4</item>
-     <item>Medtronic CGM</item>
         <item>Contour NextLink 2.4</item>
     </string-array>
     <string-array name="types_values">
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 1d6658478aa3e44e11a976b073f2d796b5cfcd67..6f17cf6ad1f85d0a425924d003652605baafbdb6 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -7,8 +7,8 @@
 	            android:disableDependentsState="false"
 	            android:switchTextOn="mmol/l"
 	            android:switchTextOff="mg/dl"
-	            android:summaryOn="mmol/l. Values are shown and setted in mmol/l"
-	            android:summaryOff="mg/dl. Values are shown and setted in mg/dl">
+	            android:summaryOn="mmol/l. Values are shown and set in mmol/l"
+	            android:summaryOff="mg/dl. Values are shown and set in mg/dl">
 	    </com.nightscout.android.utils.CustomSwitchPreference>
 	    <com.nightscout.android.utils.CustomSwitchPreference
 	            android:title="mmol/l decimals"
@@ -20,79 +20,13 @@
 	            android:summaryOn="Activated. 2 Decimal values will be shown ."
 	            android:summaryOff="Deactivated. 1 Decimal value will be shown .">
 	    </com.nightscout.android.utils.CustomSwitchPreference>
-        <ListPreference
-        android:key="monitor_type"
-        android:disableDependentsState="false"
-        android:title="Type"
-        android:summary="Select item from array"
-        android:entries="@array/types"
-        android:entryValues="@array/types_values"
-        android:defaultValue="1"
-        />
-        <EditTextPreference
-            android:title="Pump ID"
-            android:key="medtronic_cgm_id"
-            android:dialogTitle="Enter your Guardian/Pump ID"/>
-         <EditTextPreference
-            android:title="Glucometer ID"
-            android:key="glucometer_cgm_id"
-            android:dialogTitle="Enter your Glucometer ID"/>
-          <EditTextPreference
-            android:title="Sensor ID"
-            android:key="sensor_cgm_id"
-            android:dialogTitle="Enter your Sensor ID"/>
-        <ListPreference
-        android:key="calibrationType"
-        android:disableDependentsState="false"
-        android:title="Calibration Type"
-        android:summary="Select item from array"
-        android:entries="@array/calibrationTypes"
-        android:entryValues="@array/calib_types_values"
-        android:defaultValue="3"
-        />
-         <ListPreference
-        android:key="pumpPeriod"
-        android:disableDependentsState="false"
-        android:title="Pump Request Period"
-        android:summary="Select item from array"
-        android:entries="@array/pumpPeriodList"
-        android:entryValues="@array/pumpperiod_values"
-        android:defaultValue="1"
-        />
-          <ListPreference
-        android:key="glucSrcTypes"
-        android:disableDependentsState="false"
-        android:title="Glucose Value Source"
-        android:summary="Select item from array"
-        android:entries="@array/sourceTypes"
-        android:entryValues="@array/calib_types_values"
-        android:defaultValue="1"
-        />
-         <ListPreference
-        android:key="historicPeriod"
-        android:disableDependentsState="false"
-        android:title="Historic Log Request Period"
-        android:summary="Select item from array"
-        android:entries="@array/historicPeriodList"
-        android:entryValues="@array/pumpperiod_values"
-        android:defaultValue="1"
-        />
-        <ListPreference
-        android:key="historicMixPeriod"
-        android:disableDependentsState="false"
-        android:title="Period after failure"
-        android:summary="Select item from array"
-        android:entries="@array/historicMixPeriodList"
-        android:entryValues="@array/historicMixPeriodVal"
-        android:defaultValue="3"
-        />
     </PreferenceCategory>
     <PreferenceCategory android:title="Sharing">    
     <com.nightscout.android.utils.CustomSwitchPreference
-            android:title="API Upload (REST)"
+            android:title="REST API Upload"
             android:key="EnableRESTUpload"
             android:disableDependentsState="false"
-            android:summary="The REST API is an alternative to direct mongodb upload">
+            android:summary="Enable upload of BGL data to Nightscout">
     </com.nightscout.android.utils.CustomSwitchPreference>
     <EditTextPreference
             android:dependency="EnableRESTUpload"
@@ -102,58 +36,6 @@
             android:defaultValue="http://{YOUR-API-SERVER}/api"
             android:dialogMessage="This only the base URL, the uploader will automatically append /entries for the POST of CGM data and /gdentries for the POST of glucometer data values">
     </EditTextPreference>
-    <com.nightscout.android.utils.CustomSwitchPreference
-            android:title="MongoDB Upload"
-            android:key="EnableMongoUpload"
-            android:disableDependentsState="false"
-            android:summary="If you're using MongoLab and Azure this should be enabled">
-    </com.nightscout.android.utils.CustomSwitchPreference>
-    <com.nightscout.android.utils.CustomSwitchPreference
-            android:title="MongoDB REST Upload"
-            android:key="isMongoRest"
-            android:disableDependentsState="false"
-            android:switchTextOn="YES"
-            android:switchTextOff="NO"
-            android:summaryOn="Activated. USING MONGO REST API.Mogo Driver is disabled. Mongodb 3.0"
-            android:summaryOff="Deactivated. USING MONGO DRIVER.Mogo Rest is disabled. Mongodb 2.6 and older">
-    </com.nightscout.android.utils.CustomSwitchPreference>
-    <EditTextPreference
-            android:dependency="EnableMongoUpload"
-            android:title="MongoDB URI"
-            android:key="MongoDB URI"
-            android:dialogTitle="Enter MongoDB URI"
-            android:dialogMessage="Replace example values in {}'s with your correct values"
-            android:defaultValue="mongodb://{user}:{password}@{host}.mongolab.com:{11111}/{database}">
-    </EditTextPreference>
-    <EditTextPreference
-            android:dependency="EnableMongoUpload"
-            android:title="APIKEY"
-            android:key="apiKey"
-            android:dialogTitle="Enter API Key"
-            android:dialogMessage="get your API KEY from mongolabs"
-            android:defaultValue="">
-    </EditTextPreference>
-     <EditTextPreference
-            android:title="Database Name"
-            android:key="dbName"
-            android:dialogTitle="Enter Database Name"
-            android:dialogMessage="set your Database Name"
-            android:defaultValue="">
-    </EditTextPreference>
-    <EditTextPreference
-            android:dependency="EnableMongoUpload"
-            android:title="Collection Name"
-            android:key="Collection Name"
-            android:dialogTitle="Enter Collection Name"
-            android:dialogMessage="This is the name of the collection where the CGM data will be stored">
-    </EditTextPreference>
-    <EditTextPreference
-            android:dependency="EnableMongoUpload"
-            android:title="Glucometer Data Collection Name"
-            android:key="gcdCollectionName"
-            android:dialogTitle="Enter Collection Name"
-            android:dialogMessage="This is the name of the collection where the glucometer data will be stored">
-    </EditTextPreference>
     <com.nightscout.android.utils.CustomSwitchPreference
             android:title="Wifi Hack"
             android:key="EnableWifiHack"
@@ -163,15 +45,6 @@
             android:summaryOff="The uploader won't try to disable Wifi even if there is a timeout"
             >
     </com.nightscout.android.utils.CustomSwitchPreference>
-    <com.nightscout.android.utils.CustomSwitchPreference
-            android:title="2 Days at Startup"
-            android:key="InitialTwoDayUpload"
-            android:disableDependentsState="false"
-            android:defaultValue="true"
-            android:summaryOn="When the upload application first starts it will upload ~2.5 days of data"
-            android:summaryOff="The uploader won't try upload old data"
-            >
-    </com.nightscout.android.utils.CustomSwitchPreference>
     </PreferenceCategory>
      <PreferenceCategory android:title="Disclaimer">
 	    <com.nightscout.android.utils.CustomSwitchPreference
diff --git a/build.gradle b/build.gradle
index f4d8c542e4ff458c124742ead45e4a480c51cdd0..856d3d7f82e637e3d8a677102d5b860e113a2810 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ buildscript {
         jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:1.5.0'
+        classpath 'com.android.tools.build:gradle:2.1.0'
     }
 }
 
diff --git a/build/intermediates/dex-cache/cache.xml b/build/intermediates/dex-cache/cache.xml
index fba8db89fe63019a522cb871f7d4ffd430d79e79..891c5809e19a40a6e2c6fbc69674aa8c419882c3 100644
--- a/build/intermediates/dex-cache/cache.xml
+++ b/build/intermediates/dex-cache/cache.xml
@@ -1,2 +1,47 @@
 <?xml version="1.0" encoding="utf-8"?>
-<items version="2" />
+<items version="2" >
+
+    <item
+        jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/libs/physicaloidlibrary.jar"
+        jumboMode="true"
+        revision="23.0.1"
+        sha1="391534fe92fec965996d9aaf3a328b5f0c2b0740">
+        <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/2/physicaloidlibrary_9ccb0a9459a35113b137cb56f3f46bde93a6197b/classes.dex" />
+    </item>
+    <item
+        jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/libs/logback-android-1.1.1-3.jar"
+        jumboMode="true"
+        revision="23.0.1"
+        sha1="9df53e0d7c6a4d8b31979a012722d48a275e5d28">
+        <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/2/logback-android-1.1.1-3_26faaac8eb6179a49c85c550f2570a85dcf9ec77/classes.dex" />
+    </item>
+    <item
+        jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/incremental-runtime-classes/debug/instant-run.jar"
+        jumboMode="true"
+        revision="23.0.1"
+        sha1="8a0b448c242e45651aa3eff4da2565f5d2472c67">
+        <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/10/instant-run_ab0e4833222d2576fa652ea70850f6721d7c4c56/classes.dex" />
+    </item>
+    <item
+        jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/libs/mongo-java-driver-3.0.2.jar"
+        jumboMode="true"
+        revision="23.0.1"
+        sha1="7d3880dec6c8a2f07c1f544776c326834b513712">
+        <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/2/mongo-java-driver-3.0.2_cf135c838ae634eaa0bde6ebd7ab91ae93691ade/classes.dex" />
+    </item>
+    <item
+        jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/incremental-classes/debug/instant-run-bootstrap.jar"
+        jumboMode="true"
+        revision="23.0.1"
+        sha1="028bcebc4e2ad003732150e4f2c394474c8eff42">
+        <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/10/instant-run-bootstrap_a4562f9a19a66a867fdb86514799366913b783f6/classes.dex" />
+    </item>
+    <item
+        jar="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/libs/slf4j-api-1.7.2.jar"
+        jumboMode="true"
+        revision="23.0.1"
+        sha1="0081d61b7f33ebeab314e07de0cc596f8e858d97">
+        <dex dex="/Users/lgoedhart/StudioProjects/MedtronicUploader/app/build/intermediates/transforms/dex/debug/folders/1000/2/slf4j-api-1.7.2_aba40428135bcd9ffb23cf7b91dad2955f2763e7/classes.dex" />
+    </item>
+
+</items>
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index f23df6e46308cfa2b59ee3fe36cae1459a94dc36..52e3cb73d4fabf8cfd57d817bcf31c28a211bdf1 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Oct 21 11:34:03 PDT 2015
+#Sun May 01 23:04:04 AEST 2016
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip