diff --git a/Network-NineP.cabal b/Network-NineP.cabal
--- a/Network-NineP.cabal
+++ b/Network-NineP.cabal
@@ -1,5 +1,5 @@
 Name:                Network-NineP
-Version:             0.4.0
+Version:             0.4.1
 Description:         A library providing one with a somewhat higher level interface to 9P2000 protocol than existing implementations. Designed to facilitate rapid development of synthetic filesystems.
 Synopsis:            High-level abstraction over 9P protocol
 Maintainer:          Sergey Alirzaev <zl29ah@gmail.com>
@@ -9,7 +9,7 @@
 Build-Type:          Simple
 Cabal-Version:       >= 1.6
 Stability:           Experimental
-Tested-With:         GHC == 7.10.1
+Tested-With:         GHC == 8.0.1
 
 Source-repository head
   type:              git
@@ -18,7 +18,7 @@
 Source-repository this
   type:              git
   location:          https://github.com/l29ah/Network-NineP.git
-  tag:               0.4.0
+  tag:               0.4.1
 
 Library
   Build-Depends:
@@ -27,16 +27,17 @@
     containers >= 0.4.2.1 && < 0.6,
     NineP >= 0.0.2 && < 0.1,
     network >= 2.3.0.14 && < 2.7,
-    binary >= 0.5.1.0 && < 0.8,
+    binary >= 0.5.1.0 && < 0.9,
     mtl >= 2.1.2 && < 2.3,
     monad-loops >= 0.3.3.0 && < 0.5,
     regex-posix >= 0.95.2 && < 0.96,
     mstate >= 0.2.4 && < 0.3,
-    transformers >= 0.3.0.0 && < 0.5,
+    transformers >= 0.3.0.0 && < 0.6,
     stateref >= 0.3 && < 0.4,
     convertible >= 1.0.11.1 && < 1.2,
     exceptions >= 0.8.0.2 && < 0.9,
-    monad-peel >= 0.1.1 && < 0.3
+    monad-peel >= 0.1.1 && < 0.3,
+    hslogger >= 1.2.9 && < 1.3
   Exposed-modules:
     Control.Monad.EmbedIO
     Network.NineP
diff --git a/Network/NineP/Server.hs b/Network/NineP/Server.hs
--- a/Network/NineP/Server.hs
+++ b/Network/NineP/Server.hs
@@ -34,6 +34,7 @@
 import Network.BSD
 import Network.Socket hiding (send, sendTo, recv, recvFrom)
 import System.IO
+import System.Log.Logger
 import Text.Regex.Posix ((=~))
 
 import Network.NineP.Error
@@ -41,11 +42,6 @@
 import Network.NineP.Internal.Msg
 import Network.NineP.Internal.State
 
---import Debug.Trace
-traceShow a b = b
-traceIO :: String -> IO ()
-traceIO a = return ()
-
 maybeRead :: Read a => String -> Maybe a
 maybeRead = fmap fst . listToMaybe . reads
 
@@ -96,12 +92,14 @@
 	let l = fromIntegral $ runGet getWord32le $ assert (B.length s == 4) s
 	p <- B.hGet h $ l - 4
 	let m = runGet (get :: Get Msg) (B.append s p)
-	traceIO $ show m
+	debugM "Network.NineP.Server" $ show m
 	return m
 
 sender :: IO Msg -> (ByteString -> IO ()) -> IO ()
 sender get say = forever $ do
-	(say . runPut . put . join traceShow) =<< get
+	msg <- get
+	debugM "Network.NineP.Server" $ show msg
+	say $ runPut $ put msg
 
 receiver :: (EmbedIO m) => Config m -> Handle -> (Msg -> IO ()) -> IO ()
 receiver cfg h say = runReaderT (runMState (iterateUntil id (do
diff --git a/Test.hs b/Test.hs
--- a/Test.hs
+++ b/Test.hs
@@ -4,6 +4,7 @@
 import Control.Monad.Trans
 import qualified Data.ByteString.Lazy.Char8 as B
 import Data.Word
+import System.Log.Logger
 
 import Network.NineP as N
 import Network.NineP.Error
@@ -18,6 +19,7 @@
 boringwr _ c = return $ B.take (fromIntegral c) "i am so very boring"
 
 main = do
+	updateGlobalLogger "Network.NineP" $ setLevel DEBUG
 	memd <- memoryDirectory "/" :: IO (NineFile IO)
 	run9PServer $ Config {
 			-- TODO Data.Default?
