diff --git a/keywords.txt b/keywords.txt
index 76cf9f20..4968ef5b 100644
--- a/keywords.txt
+++ b/keywords.txt
@@ -88,6 +88,8 @@ setDataShaping	KEYWORD2
 setOOK	KEYWORD2
 setDataShapingOOK	KEYWORD2
 setCRC	KEYWORD2
+variablePacketLengthMode KEYWORD2
+fixedPacketLengthMode KEYWORD2
 
 # RF69-specific
 setAESKey	KEYWORD2
diff --git a/src/modules/CC1101.cpp b/src/modules/CC1101.cpp
index bbfbb5a2..657400a0 100644
--- a/src/modules/CC1101.cpp
+++ b/src/modules/CC1101.cpp
@@ -493,7 +493,7 @@ size_t CC1101::getPacketLength(bool update) {
     if (_packetLengthConfig == CC1101_LENGTH_CONFIG_VARIABLE) {
       _packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO);
     } else {
-      _packetLength = _mod->SPIreadRegister(CC1101_REG_FIFO);
+      _packetLength = _mod->SPIreadRegister(CC1101_REG_PKTLEN);
     }
 
     _packetLengthQueried = true;
@@ -513,7 +513,7 @@ int16_t CC1101::fixedPacketLengthMode(uint8_t len) {
     return(state);
   }
 
-  // set max length to register
+  // set length to register
   state = SPIsetRegValue(CC1101_REG_PKTLEN, len);
   if (state != ERR_NONE) {
     return(state);
@@ -530,13 +530,20 @@ int16_t CC1101::variablePacketLengthMode(uint8_t maxLen) {
     return(ERR_PACKET_TOO_LONG);
   }
 
+  // set to fixed packet length
   int16_t state = SPIsetRegValue(CC1101_REG_PKTCTRL0, CC1101_LENGTH_CONFIG_VARIABLE, 1, 0);
   if (state != ERR_NONE) {
     return(state);
   }
-  _packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE;
 
+  // set max length to register
   state = SPIsetRegValue(CC1101_REG_PKTLEN, maxLen);
+  if (state != ERR_NONE) {
+    return(state);
+  }
+
+  // all went well: cache the reg value
+  _packetLengthConfig = CC1101_LENGTH_CONFIG_VARIABLE;
   return(state);
 }