diff --git a/net-mqtt.cabal b/net-mqtt.cabal
--- a/net-mqtt.cabal
+++ b/net-mqtt.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.35.2.
+-- This file has been generated from package.yaml by hpack version 0.38.1.
 --
 -- see: https://github.com/sol/hpack
 
 name:           net-mqtt
-version:        0.8.6.3
+version:        0.8.6.4
 synopsis:       An MQTT Protocol Implementation.
 description:    Please see the README on GitHub at <https://github.com/dustin/mqtt-hs#readme>
 category:       Network
@@ -38,7 +38,7 @@
   hs-source-dirs:
       src
   build-depends:
-      QuickCheck >=2.12.6.1 && <2.17
+      QuickCheck >=2.12.6.1 && <2.25
     , async >=2.2.1 && <2.3
     , attoparsec >=0.13.2 && <0.15
     , attoparsec-binary >=0.2 && <1.0
@@ -68,7 +68,7 @@
       app/example
   ghc-options: -threaded -rtsopts -with-rtsopts=-N
   build-depends:
-      QuickCheck >=2.12.6.1 && <2.17
+      QuickCheck >=2.12.6.1 && <2.25
     , async >=2.2.1 && <2.3
     , attoparsec >=0.13.2 && <0.15
     , attoparsec-binary >=0.2 && <1.0
@@ -99,7 +99,7 @@
       app/mqtt-watch
   ghc-options: -threaded -rtsopts -eventlog -with-rtsopts=-N
   build-depends:
-      QuickCheck >=2.12.6.1 && <2.17
+      QuickCheck >=2.12.6.1 && <2.25
     , async >=2.2.1 && <2.3
     , attoparsec >=0.13.2 && <0.15
     , attoparsec-binary >=0.2 && <1.0
@@ -138,7 +138,7 @@
   ghc-options: -threaded -rtsopts -with-rtsopts=-N
   build-depends:
       HUnit
-    , QuickCheck >=2.12.6.1 && <2.17
+    , QuickCheck >=2.12.6.1 && <2.25
     , async >=2.2.1 && <2.3
     , attoparsec >=0.13.2 && <0.15
     , attoparsec-binary >=0.2 && <1.0
diff --git a/src/Network/MQTT/Client.hs b/src/Network/MQTT/Client.hs
--- a/src/Network/MQTT/Client.hs
+++ b/src/Network/MQTT/Client.hs
@@ -135,14 +135,21 @@
 
 -- | Configuration for setting up an MQTT client.
 data MQTTConfig = MQTTConfig{
-  _cleanSession     :: Bool -- ^ False if a session should be reused.
+  -- | False if a session should be reused.
+  --   This makes MQTT queue messages if the device goes offline.
+  --   Note you've to set '_connID' for this to be meaningful.
+  --   Brokers may assign one for you giving the wrong behavior.
+  --   AWS iot core will crash if this is not set.
+  _cleanSession     :: Bool
   , _lwt            :: Maybe LastWill -- ^ LastWill message to be sent on client disconnect.
   , _msgCB          :: MessageCallback -- ^ Callback for incoming messages.
   , _protocol       :: ProtocolLevel -- ^ Protocol to use for the connection.
   , _connProps      :: [Property] -- ^ Properties to send to the broker in the CONNECT packet.
   , _hostname       :: String -- ^ Host to connect to (parsed from the URI)
   , _port           :: Int -- ^ Port number (parsed from the URI)
-  , _connID         :: String -- ^ Unique connection ID (parsed from the URI)
+  -- | Unique connection ID (parsed from the URI).
+  --   Set it by using x.y#connID
+  , _connID         :: String
   , _username       :: Maybe String -- ^ Optional username (parsed from the URI)
   , _password       :: Maybe String -- ^ Optional password (parsed from the URI)
   , _connectTimeout :: Int -- ^ Connection timeout (microseconds)
