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 24b2c9b5793e2adc55cebc48b0ce999a008dd55e..b66a3c12f160c93cfd63f194a529e175366abddb 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlReader.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlReader.java
@@ -38,6 +38,7 @@ import info.nightscout.android.medtronic.message.PumpStatusResponseMessage;
 import info.nightscout.android.medtronic.message.PumpTimeRequestMessage;
 import info.nightscout.android.medtronic.message.PumpTimeResponseMessage;
 import info.nightscout.android.medtronic.message.ReadInfoResponseMessage;
+import info.nightscout.android.medtronic.message.RequestLinkKeyRequestMessage;
 import info.nightscout.android.medtronic.message.RequestLinkKeyResponseMessage;
 import info.nightscout.android.medtronic.message.UnexpectedMessageException;
 import info.nightscout.android.model.medtronicNg.PumpStatusEvent;
@@ -251,7 +252,6 @@ public class MedtronicCnlReader implements ContourNextLinkMessageHandler {
 
     public void requestReadInfo() throws IOException, TimeoutException, EncryptionException, ChecksumException {
         Log.d(TAG, "Begin requestReadInfo");
-
         ReadInfoResponseMessage response = new ReadInfoRequestMessage(mPumpSession).send(mDevice);
 
         long linkMAC = response.getLinkMAC();
@@ -264,18 +264,9 @@ public class MedtronicCnlReader implements ContourNextLinkMessageHandler {
 
     public void requestLinkKey() throws IOException, TimeoutException, EncryptionException, ChecksumException {
         Log.d(TAG, "Begin requestLinkKey");
-        new ContourNextLinkBinaryMessage(ContourNextLinkBinaryMessage.CommandType.REQUEST_LINK_KEY, mPumpSession, null).send(this);
-
-        ContourNextLinkMessage response = RequestLinkKeyResponseMessage.fromBytes(mPumpSession, readMessage());
-
-        // FIXME - this needs to go into RequestLinkKeyResponseMessage
-        ByteBuffer infoBuffer = ByteBuffer.allocate(55);
-        infoBuffer.order(ByteOrder.BIG_ENDIAN);
-        infoBuffer.put(response.encode(), 0x21, 55);
-
-        byte[] packedLinkKey = infoBuffer.array();
 
-        this.getPumpSession().setPackedLinkKey(packedLinkKey);
+        RequestLinkKeyResponseMessage response = new RequestLinkKeyRequestMessage(mPumpSession).send(mDevice);
+        this.getPumpSession().setKey(response.getKey());
 
         Log.d(TAG, String.format("Finished requestLinkKey. linkKey = '%s'", this.getPumpSession().getKey()));
     }
diff --git a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlSession.java b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlSession.java
index 215e7f3e6174163da35db8824c928d87f5d454bb..b5d96589c39013cbba4acf9a29c219dd9adfd65e 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlSession.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/MedtronicCnlSession.java
@@ -100,26 +100,6 @@ public class MedtronicCnlSession {
         this.key = key;
     }
 
-    public void setPackedLinkKey(byte[] packedLinkKey) {
-        this.key = new byte[16];
-
-        int pos = this.stickSerial.charAt(this.stickSerial.length() - 1) & 7;
-
-        for (int i = 0; i < this.key.length; i++) {
-            if ((packedLinkKey[pos + 1] & 1) == 1) {
-                this.key[i] = (byte) ~packedLinkKey[pos];
-            } else {
-                this.key[i] = packedLinkKey[pos];
-            }
-
-            if (((packedLinkKey[pos + 1] >> 1) & 1) == 0) {
-                pos += 3;
-            } else {
-                pos += 2;
-            }
-        }
-    }
-
     public String getStickSerial() {
         return stickSerial;
     }
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyRequestMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyRequestMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd4e16ea399f271ce7bc18b2d1ac97857650f0dc
--- /dev/null
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyRequestMessage.java
@@ -0,0 +1,25 @@
+package info.nightscout.android.medtronic.message;
+
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+import info.nightscout.android.USB.UsbHidDriver;
+import info.nightscout.android.medtronic.MedtronicCnlSession;
+
+/**
+ * Created by volker on 10.12.2016.
+ */
+
+public class RequestLinkKeyRequestMessage extends ContourNextLinkBinaryMessage {
+    public RequestLinkKeyRequestMessage(MedtronicCnlSession pumpSession) throws ChecksumException {
+        super(CommandType.REQUEST_LINK_KEY, pumpSession, null);
+    }
+
+    public RequestLinkKeyResponseMessage send(UsbHidDriver mDevice) throws IOException, TimeoutException, EncryptionException, ChecksumException {
+        sendMessage(mDevice);
+
+        RequestLinkKeyResponseMessage response = new RequestLinkKeyResponseMessage(mPumpSession, readMessage(mDevice));
+
+        return response;
+    }
+}
diff --git a/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyResponseMessage.java b/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyResponseMessage.java
index 08aa3a33826648fb99675162891b520b898802a5..8bb77ad63f543c992a1afbee43760462ad23cdec 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyResponseMessage.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/message/RequestLinkKeyResponseMessage.java
@@ -1,13 +1,25 @@
 package info.nightscout.android.medtronic.message;
 
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
 import info.nightscout.android.medtronic.MedtronicCnlSession;
 
 /**
  * Created by lgoedhart on 10/05/2016.
  */
 public class RequestLinkKeyResponseMessage extends MedtronicResponseMessage {
+
+    private byte[] key;
+
     protected RequestLinkKeyResponseMessage(MedtronicCnlSession pumpSession, byte[] payload) throws EncryptionException, ChecksumException {
         super(pumpSession, payload);
+
+        ByteBuffer infoBuffer = ByteBuffer.allocate(55);
+        infoBuffer.order(ByteOrder.BIG_ENDIAN);
+        infoBuffer.put(this.encode(), 0x21, 55);
+
+        setPackedLinkKey(infoBuffer.array());
     }
 
     public static ContourNextLinkMessage fromBytes(MedtronicCnlSession pumpSession, byte[] bytes) throws ChecksumException, EncryptionException {
@@ -18,4 +30,28 @@ public class RequestLinkKeyResponseMessage extends MedtronicResponseMessage {
 
         return message;
     }
+
+    public byte[] getKey() {
+        return key;
+    }
+
+    private void setPackedLinkKey(byte[] packedLinkKey) {
+        this.key = new byte[16];
+
+        int pos = mPumpSession.getStickSerial().charAt(mPumpSession.getStickSerial().length() - 1) & 7;
+
+        for (int i = 0; i < this.key.length; i++) {
+            if ((packedLinkKey[pos + 1] & 1) == 1) {
+                this.key[i] = (byte) ~packedLinkKey[pos];
+            } else {
+                this.key[i] = packedLinkKey[pos];
+            }
+
+            if (((packedLinkKey[pos + 1] >> 1) & 1) == 0) {
+                pos += 3;
+            } else {
+                pos += 2;
+            }
+        }
+    }
 }
\ No newline at end of file