diff --git a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlReader.java b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlReader.java
index ca2629e4dba044519a7e4fba2bcbe1c2be007b2d..77d57c09c9df726e2b70b4d6b9834bc6dd6e092d 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlReader.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlReader.java
@@ -67,7 +67,7 @@ public class MedtronicCnlReader {
 
     public void requestDeviceInfo()
             throws IOException, TimeoutException, UnexpectedMessageException, ChecksumException, EncryptionException {
-        DeviceInfoResponseCommandMessage response = new DeviceInfoRequestCommandMessage(mPumpSession).send(mDevice);
+        DeviceInfoResponseCommandMessage response = new DeviceInfoRequestCommandMessage().send(mDevice);
 
         //TODO - extract more details form the device info.
         mStickSerial = response.getSerial();
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionRequestMessage.java
index a822ce73d09ea7eeac055c90b1da3af798d118be..6a4e5f51f432ee982057195fbb23214e4669e9f8 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionRequestMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/CloseConnectionRequestMessage.java
@@ -15,10 +15,10 @@ public class CloseConnectionRequestMessage extends ContourNextLinkBinaryRequestM
         super(CommandType.CLOSE_CONNECTION, pumpSession, payload);
     }
 
-    public OpenConnectionResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException {
+    public CloseConnectionResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException {
         sendMessage(mDevice);
 
-        OpenConnectionResponseMessage response = new OpenConnectionResponseMessage(mPumpSession, readMessage(mDevice));
+        CloseConnectionResponseMessage response = new CloseConnectionResponseMessage(mPumpSession, readMessage(mDevice));
 
         // FIXME - We need to care what the response message is - wrong MAC and all that
         return response;
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkMessage.java
index 1c8d92aea954fc08f072d89d3f2111e7310a2f4e..f5489004508db2784ea18ba94c04bb17a1526598 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/ContourNextLinkMessage.java
@@ -43,7 +43,6 @@ public class ContourNextLinkMessage {
         }
     }
 
-
     public enum CommandType {
         NO_TYPE(0x0),
         OPEN_CONNECTION(0x10),
@@ -79,12 +78,6 @@ public class ContourNextLinkMessage {
         return mPayload.array();
     }
 
-    // TODO refactor
-    public void send(ContourNextLinkMessageHandler handler) throws IOException {
-        handler.sendMessage(this);
-    }
-
-
     // FIXME - get rid of this - make a Builder instead
     protected void setPayload(byte[] payload) {
         if (payload != null) {
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoRequestCommandMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoRequestCommandMessage.java
index 3dc9eb0265fb936f2f293445e15826167b985723..df7dfa46168adc867cb905bf0adf7f31eead5b33 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoRequestCommandMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoRequestCommandMessage.java
@@ -10,9 +10,9 @@ import info.nightscout.android.medtronic.MedtronicCnlSession;
  * Created by volker on 10.12.2016.
  */
 
-public class DeviceInfoRequestCommandMessage extends ContourNextLinkMessage {
-    public DeviceInfoRequestCommandMessage(MedtronicCnlSession pumpSession) {
-        super(pumpSession, "X".getBytes());
+public class DeviceInfoRequestCommandMessage extends ContourNextLinkRequestMessage {
+    public DeviceInfoRequestCommandMessage() {
+        super("X".getBytes());
     }
 
     public DeviceInfoResponseCommandMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException, UnexpectedMessageException {
@@ -28,12 +28,12 @@ public class DeviceInfoRequestCommandMessage extends ContourNextLinkMessage {
             try {
                 if (ASCII.EOT.equals(response1[0])) {
                     // response 1 is the ASTM message
-                    response = new DeviceInfoResponseCommandMessage(mPumpSession, response1);
+                    response = new DeviceInfoResponseCommandMessage(response1);
                     // ugly....
                     response.checkControlMessage(response2, ASCII.ENQ);
                 } else {
                     // response 2 is the ASTM message
-                    response = new DeviceInfoResponseCommandMessage(mPumpSession, response1);
+                    response = new DeviceInfoResponseCommandMessage(response1);
                     // ugly, too....
                     response.checkControlMessage(response1, ASCII.ENQ);
                 }
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoResponseCommandMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoResponseCommandMessage.java
index fec7c00038cfa9368ee6340ecff94ce5e5bf7311..03a2be4512af2e8a1c97de0154cad91c029b8c55 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoResponseCommandMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/DeviceInfoResponseCommandMessage.java
@@ -10,13 +10,13 @@ import info.nightscout.android.medtronic.MedtronicCnlSession;
 /**
  * Created by lgoedhart on 10/05/2016.
  */
-public class DeviceInfoResponseCommandMessage extends MedtronicResponseMessage {
+public class DeviceInfoResponseCommandMessage extends ContourNextLinkResponseMessage {
     private String serial = "";
     private final Pattern pattern = Pattern.compile(".*?\\^(\\d{4}-\\d{7})\\^.*");
 
-    protected DeviceInfoResponseCommandMessage(MedtronicCnlSession pumpSession, byte[] payload)
+    protected DeviceInfoResponseCommandMessage(byte[] payload)
             throws ChecksumException, EncryptionException, TimeoutException, UnexpectedMessageException, IOException {
-        super(pumpSession, payload);
+        super(payload);
 
         extractStickSerial(new String(payload));
     }
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/MedtronicResponseMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/MedtronicResponseMessage.java
index dcc926cc16b7166eb54f4a3b0ab30538d9591675..780358d470fe4bc22d92b3b932d8185cbb75527f 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/MedtronicResponseMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/MedtronicResponseMessage.java
@@ -16,9 +16,13 @@ public class MedtronicResponseMessage extends ContourNextLinkResponseMessage {
     static int ENCRYPTED_ENVELOPE_SIZE = 3;
     static int CRC_SIZE = 2;
 
+    protected MedtronicCnlSession mPumpSession;
+
     protected MedtronicResponseMessage(MedtronicCnlSession pumpSession, byte[] payload) throws EncryptionException, ChecksumException {
         super(payload);
 
+        mPumpSession = pumpSession;
+
         // 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.
         // Also, READ_INFO and REQUEST_LINK_KEY are not encrypted