diff --git a/metro-socket.cabal b/metro-socket.cabal
--- a/metro-socket.cabal
+++ b/metro-socket.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: dcb41445e65758018ed9b7846b1058ae7edd3e0b6a89cd5d4dca8da443e87798
+-- hash: df19f17745c5f5ef862a74ec37e9e31ba9e8fea691fafb2ee5d7eb26d0179ad4
 
 name:           metro-socket
-version:        0.1.0.0
+version:        0.1.0.1
 synopsis:       Socket transport for metro
 description:    Please see the README on GitHub at <https://github.com/Lupino/metro/tree/master/metro-socket#readme>
 category:       Web
@@ -45,6 +45,7 @@
     , bytestring
     , directory
     , hashable
+    , hashmap-io
     , hslogger
     , metro
     , mtl
diff --git a/src/Metro/UDPServer.hs b/src/Metro/UDPServer.hs
--- a/src/Metro/UDPServer.hs
+++ b/src/Metro/UDPServer.hs
@@ -13,12 +13,12 @@
 import           Control.Monad             (void)
 import           Data.ByteString           (empty)
 import           Data.Hashable
+import           Data.IOHashMap            (IOHashMap)
+import qualified Data.IOHashMap            as HM (delete, empty, insert, lookup)
 import           Metro.Class               (GetPacketId, RecvPacket,
                                             Servable (..), Transport,
                                             TransportConfig)
 import           Metro.Conn
-import           Metro.IOHashMap           (IOHashMap, newIOHashMap)
-import qualified Metro.IOHashMap           as HM (delete, insert, lookup)
 import           Metro.Node                (NodeEnv1)
 import           Metro.Server              (ServerT, getServ, handleConn,
                                             serverEnv)
@@ -41,11 +41,11 @@
   type STP UDPServer = UDPSocket
   newServer (UDPConfig hostPort) = do
     sock <- liftIO $ bindTo hostPort
-    UDPServer sock <$> newIOHashMap
+    UDPServer sock <$> HM.empty
   servOnce us@(UDPServer serv handleList) done = do
     (bs, addr) <- liftIO $ recvFrom serv 4194304
 
-    bsHandle <- HM.lookup handleList $ show addr
+    bsHandle <- HM.lookup (show addr) handleList
     case bsHandle of
       Just h  -> feed h bs
       Nothing ->
@@ -56,7 +56,7 @@
           closeBSHandle h
 
   onConnEnter _ _ = return ()
-  onConnLeave (UDPServer _ handleList) addr = HM.delete handleList (show addr)
+  onConnLeave (UDPServer _ handleList) addr = HM.delete (show addr) handleList
   servClose (UDPServer serv _) = liftIO $ Socket.close serv
 
 udpServer :: String -> ServerConfig UDPServer
@@ -69,7 +69,7 @@
   -> BSHandle
   -> m (TransportConfig UDPSocket)
 newTransportConfig (UDPServer sock handleList) addr h = do
-  HM.insert handleList (show addr) h
+  HM.insert (show addr) h handleList
   return $ udpSocket_ $ bsTransportConfig h $ flip (sendAllTo sock) addr
 
 newClient
