diff --git a/kafka-device-vrpn.cabal b/kafka-device-vrpn.cabal
--- a/kafka-device-vrpn.cabal
+++ b/kafka-device-vrpn.cabal
@@ -1,19 +1,19 @@
 name:                kafka-device-vrpn
-version:             0.1.5.0
+version:             0.2.1.2
 synopsis:            VRPN events via a Kafka message broker
 description:         This package contains functions for passing VRPN \<<https://github.com/vrpn/vrpn/wiki>\> events to topics on a Kafka message broker \<<https://kafka.apache.org/>\>.  Also see \<<https://hackage.haskell.org/package/kafka-device/>\>.
 license:             MIT
 license-file:        LICENSE
 author:              Brian W Bush <consult@brianwbush.info>
 maintainer:          Brian W Bush <consult@brianwbush.info>
-copyright:           (c) 2016 Brian W Bush
+copyright:           (c) 2016-17 Brian W Bush
 category:            Network
 build-type:          Simple
 cabal-version:       >= 1.10
 stability:           Experimental
 homepage:            https://bitbucket.org/functionally/kafka-device-vrpn
 bug-reports:         https://bwbush.atlassian.net/projects/HKAFDEV/issues/
-package-url:         https://bitbucket.org/functionally/kafka-device-vrpn/downloads/kafka-device-vrpn-0.1.5.0.tar.gz
+package-url:         https://bitbucket.org/functionally/kafka-device-vrpn/downloads/kafka-device-vrpn-$version.tar.gz
 
 extra-source-files:  ReadMe.md
 
@@ -24,9 +24,8 @@
 library
   exposed-modules:  Network.UI.Kafka.VRPN
   build-depends:    base         >= 4.8 && < 5
-               ,    kafka-device
-               ,    milena
-               ,    vrpn
+               ,    kafka-device >= 0.2.1.2
+               ,    vrpn         >= 0.2.1
   hs-source-dirs:   src
   ghc-options:      -Wall
   default-language: Haskell2010
@@ -35,7 +34,6 @@
   main-is:          Main.hs
   build-depends:    base
                ,    kafka-device
-               ,    milena
                ,    vrpn
   hs-source-dirs:   src
   ghc-options:      -Wall
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -1,6 +1,6 @@
 {-|
 Module      :  Main
-Copyright   :  (c) 2016 Brian W Bush
+Copyright   :  (c) 2016-17 Brian W Bush
 License     :  MIT
 Maintainer  :  Brian W Bush <consult@brianwbush.info>
 Stability   :  Experimental
@@ -16,7 +16,7 @@
 ) where
 
 
-import Data.String (fromString)
+import Network.UI.Kafka (TopicConnection(TopicConnection))
 import Network.UI.Kafka.VRPN (vrpnLoop)
 import System.Environment (getArgs)
 
@@ -40,9 +40,7 @@
           (_, loop) <-
             vrpnLoop
               device
-              (fromString client)
-              (fromString host, toEnum $ read port)
-              (fromString topic)
+              (TopicConnection client (host, read port) topic)
               sensor
               callbacks
           result <- loop
diff --git a/src/Network/UI/Kafka/VRPN.hs b/src/Network/UI/Kafka/VRPN.hs
--- a/src/Network/UI/Kafka/VRPN.hs
+++ b/src/Network/UI/Kafka/VRPN.hs
@@ -1,6 +1,6 @@
 {-|
 Module      :  Network.UI.Kafka.VRPN
-Copyright   :  (c) 2016 Brian W Bush
+Copyright   :  (c) 2016-17 Brian W Bush
 License     :  MIT
 Maintainer  :  Brian W Bush <consult@brianwbush.info>
 Stability   :  Experimental
@@ -18,9 +18,7 @@
 
 import Control.Concurrent (MVar, forkIO, isEmptyMVar, newEmptyMVar, putMVar, takeMVar)
 import Control.Monad (void, zipWithM_)
-import Network.Kafka (KafkaAddress, KafkaClientId)
-import Network.Kafka.Protocol (TopicName)
-import Network.UI.Kafka (ExitAction, LoopAction, Sensor, producerLoop)
+import Network.UI.Kafka (ExitAction, LoopAction, Sensor, TopicConnection, producerLoop)
 import Network.UI.Kafka.Types (Button(..), Event(..))
 
 import qualified Network.VRPN as V
@@ -41,13 +39,11 @@
 
 -- | Produce events for a Kafka topic from VRPN callbacks \<<https://hackage.haskell.org/package/vrpn/docs/Network-VRPN.html>\>.
 vrpnLoop :: String                      -- ^ The VRPN host, e.g. spacenav0@localhost.
-         -> KafkaClientId               -- ^ A Kafka client identifier for the producer.
-         -> KafkaAddress                -- ^ The address of the Kafka broker.
-         -> TopicName                   -- ^ The Kafka topic name.
+         -> TopicConnection             -- ^ The Kafka topic name and connection information.
          -> Sensor                      -- ^ The name of the sensor producing events.
          -> [VrpnCallback]              -- ^ Which callbacks to enable.
          -> IO (ExitAction, LoopAction) -- ^ Action to create the exit and loop actions.
-vrpnLoop device clientId address topic sensor callbacks =
+vrpnLoop device topicConnection sensor callbacks =
   do
     exitNow <- newEmptyMVar
     nextEvent <- newEmptyMVar
@@ -61,7 +57,7 @@
         , (Dial   , V.Dial    device (Just $ dialCallback     nextEvent)                )
         ]
     (exit, loop) <-
-      producerLoop clientId address topic sensor
+      producerLoop topicConnection sensor
       $ (: [])
       <$> takeMVar nextEvent
     return
