diff --git a/net-mqtt-rpc.cabal b/net-mqtt-rpc.cabal
--- a/net-mqtt-rpc.cabal
+++ b/net-mqtt-rpc.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.33.0.
+-- This file has been generated from package.yaml by hpack version 0.34.4.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 468ed5b7341f379a28bd55450feca3cbb85b8dc12b44f85df9f7cc7771082f7b
+-- hash: 3b23271875b2f32d9cd255411974c5c45f97b08b12d300e2e341e73cef64e876
 
 name:           net-mqtt-rpc
-version:        0.1.2.1
+version:        0.2.0.0
 synopsis:       Make RPC calls via an MQTT broker.
 description:    Please see the README on GitHub at <https://github.com/dustin/net-mqtt-rpc#readme>
 category:       Network
@@ -34,13 +34,16 @@
       Paths_net_mqtt_rpc
   hs-source-dirs:
       src
-  default-extensions: OverloadedStrings RecordWildCards NamedFieldPuns
+  default-extensions:
+      OverloadedStrings
+      RecordWildCards
+      NamedFieldPuns
   ghc-options: -Wall
   build-depends:
       base >=4.7 && <5
     , bytestring
     , exceptions
-    , net-mqtt >=0.6.2.0 && <0.8.0.0
+    , net-mqtt >=0.8.0.0
     , random
     , stm
     , text
@@ -53,13 +56,16 @@
       Paths_net_mqtt_rpc
   hs-source-dirs:
       app
-  default-extensions: OverloadedStrings RecordWildCards NamedFieldPuns
+  default-extensions:
+      OverloadedStrings
+      RecordWildCards
+      NamedFieldPuns
   ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
   build-depends:
       base >=4.7 && <5
     , bytestring
     , exceptions
-    , net-mqtt >=0.6.2.0 && <0.8.0.0
+    , net-mqtt >=0.8.0.0
     , net-mqtt-rpc
     , network-uri
     , optparse-applicative
diff --git a/src/Network/MQTT/RPC.hs b/src/Network/MQTT/RPC.hs
--- a/src/Network/MQTT/RPC.hs
+++ b/src/Network/MQTT/RPC.hs
@@ -5,8 +5,7 @@
 
 module Network.MQTT.RPC (call) where
 
-import           Control.Concurrent.STM (atomically, newTChanIO, readTChan,
-                                         writeTChan)
+import           Control.Concurrent.STM (atomically, newTChanIO, readTChan, writeTChan)
 import           Control.Monad          (when)
 import           Control.Monad.Catch    (bracket, throwM)
 import           Control.Monad.IO.Class (MonadIO (..))
@@ -15,6 +14,7 @@
 import qualified Data.Text.Encoding     as TE
 import qualified Data.UUID              as UUID
 import           Network.MQTT.Client
+import           Network.MQTT.Topic
 import           System.Random          (randomIO)
 
 blToText :: BL.ByteString -> Text
@@ -33,15 +33,16 @@
   r <- newTChanIO
   corr <- BL.fromStrict . UUID.toASCIIBytes <$> randomIO
   subid <- BL.fromStrict . ("$rpc/" <>) . UUID.toASCIIBytes <$> randomIO
-  go corr subid r
+  Just filt <- pure (mkFilter . blToText $ subid)
+  go corr subid filt r
 
-  where go theID theTopic r = bracket reg unreg rt
+  where go theID theTopic filt r = bracket reg unreg rt
           where reg = do
                   atomically $ registerCorrelated mc theID (SimpleCallback cb)
-                  subscribe mc [(blToText theTopic, subOptions)] mempty
+                  subscribe mc [(filt, subOptions)] mempty
                 unreg _ = do
                   atomically $ unregisterCorrelated mc theID
-                  unsubscribe mc [blToText theTopic] mempty
+                  unsubscribe mc [filt] mempty
                 cb _ _ m _ = atomically $ writeTChan r m
                 rt _ = do
                   publishq mc topic req False QoS2 [
