diff --git a/src/SSH.hs b/src/SSH.hs
--- a/src/SSH.hs
+++ b/src/SSH.hs
@@ -2,7 +2,8 @@
 
 import Control.Concurrent (forkIO)
 import Control.Concurrent.Chan
-import Control.Monad.State
+import Control.Monad (replicateM)
+import Control.Monad.Trans.State
 import Data.Digest.Pure.SHA (bytestringDigest, sha1)
 import Crypto.Classes (Hash)
 import Crypto.HMAC
diff --git a/src/SSH/Channel.hs b/src/SSH/Channel.hs
--- a/src/SSH/Channel.hs
+++ b/src/SSH/Channel.hs
@@ -3,7 +3,8 @@
 
 import Control.Concurrent (forkIO)
 import Control.Concurrent.Chan
-import Control.Monad.State
+import Control.Monad (when)
+import Control.Monad.Trans.State
 import Data.Word
 import System.Exit
 import System.IO
diff --git a/src/SSH/Crypto.hs b/src/SSH/Crypto.hs
--- a/src/SSH/Crypto.hs
+++ b/src/SSH/Crypto.hs
@@ -1,6 +1,7 @@
 module SSH.Crypto where
 
-import Control.Monad.State
+import Control.Monad (replicateM)
+import Control.Monad.Trans.State
 import Data.Digest.Pure.SHA (bytestringDigest, sha1)
 import qualified Codec.Crypto.RSA as RSA
 import qualified Data.ByteString.Lazy as LBS
diff --git a/src/SSH/NetReader.hs b/src/SSH/NetReader.hs
--- a/src/SSH/NetReader.hs
+++ b/src/SSH/NetReader.hs
@@ -1,6 +1,6 @@
 module SSH.NetReader where
 
-import Control.Monad.State
+import Control.Monad.Trans.State
 import Data.Binary (decode)
 import Data.Int
 import Data.Word
diff --git a/src/SSH/Packet.hs b/src/SSH/Packet.hs
--- a/src/SSH/Packet.hs
+++ b/src/SSH/Packet.hs
@@ -1,6 +1,7 @@
 module SSH.Packet where
 
-import Control.Monad.Writer
+import Control.Monad.IO.Class
+import Control.Monad.Trans.Writer
 import Data.Binary (encode)
 import Data.Bits ((.&.))
 import Data.Digest.Pure.SHA
diff --git a/src/SSH/Session.hs b/src/SSH/Session.hs
--- a/src/SSH/Session.hs
+++ b/src/SSH/Session.hs
@@ -2,7 +2,8 @@
 module SSH.Session where
 
 import Control.Concurrent.Chan
-import Control.Monad.State
+import Control.Monad.IO.Class
+import Control.Monad.Trans.State
 import Data.Binary (decode, encode)
 import Data.Word
 import System.IO
diff --git a/src/SSH/Util.hs b/src/SSH/Util.hs
--- a/src/SSH/Util.hs
+++ b/src/SSH/Util.hs
@@ -25,7 +25,7 @@
    takeWhile (/=0) .
    iterate (flip div x)
 
-toOctets :: Int -> Integer -> [Word8]
+toOctets :: (Integral a, Integral b) => a -> b -> [Word8]
 toOctets n x = (toBase n . fromIntegral) x
 
 fromOctets :: (Integral a, Integral b) => a -> [Word8] -> b
@@ -34,7 +34,7 @@
    sum $
    zipWith (*) (powersOf n) (reverse (map fromIntegral x))
 
-i2osp :: Int -> Integer -> [Word8]
+i2osp :: Integral a => Int -> a -> [Word8]
 i2osp l y =
    pad ++ z
       where
diff --git a/ssh.cabal b/ssh.cabal
--- a/ssh.cabal
+++ b/ssh.cabal
@@ -1,5 +1,5 @@
 name:                ssh
-version:             0.2.1
+version:             0.2.3
 synopsis:            A pure-Haskell SSH server library.
 description:
     This package was split from darcsden into its own project; documentation is
@@ -51,10 +51,10 @@
                     crypto-api,
                     cryptohash,
                     HsOpenSSL >= 0.8,
-                    mtl,
                     network,
                     process,
                     RSA,
                     random,
                     SHA,
-                    SimpleAES
+                    SimpleAES,
+                    transformers
