diff --git a/mohws.cabal b/mohws.cabal
--- a/mohws.cabal
+++ b/mohws.cabal
@@ -1,6 +1,6 @@
 Cabal-Version: 2.2
 Name:         mohws
-Version:      0.2.1.7
+Version:      0.2.1.8
 Author:       Simon Marlow, Bjorn Bringert <bjorn@bringert.net>
 Copyright:    Simon Marlow, Bjorn Bringert
 Maintainer:   Henning Thielemann <webserver@henning-thielemann.de>
@@ -28,7 +28,7 @@
 Source-Repository this
   Type:     darcs
   Location: http://code.haskell.org/mohws/
-  Tag:      0.2.1.7
+  Tag:      0.2.1.8
 
 Flag dynamic
   description: Build server with dynamically loaded plugins
@@ -48,7 +48,7 @@
     old-locale >=1.0 && <1.1,
     bytestring >=0.9 && <0.11,
     filepath >=1.1 && <1.5,
-    utility-ht >=0.0.3 && <0.1,
+    utility-ht >=0.0.12 && <0.1,
     transformers >=0.2 && <0.6,
     explicit-exception >=0.1 && <0.2,
     data-accessor >=0.2 && <0.3,
diff --git a/src/Network/MoHWS/ParserUtility.hs b/src/Network/MoHWS/ParserUtility.hs
--- a/src/Network/MoHWS/ParserUtility.hs
+++ b/src/Network/MoHWS/ParserUtility.hs
@@ -5,16 +5,17 @@
 
 import Network.MoHWS.Utility (splitBy, )
 
-import Control.Monad (liftM2, )
+import qualified Data.List.Reverse.StrictSpine as Rev
 import Data.Char (chr, )
 import Data.List ((\\), )
-import Data.List.HT (dropWhileRev, )
 import System.IO (Handle, hGetLine, )
 import Text.ParserCombinators.Parsec
           (GenParser, Parser, char, string,
            (<|>), try, oneOf, noneOf, option, skipMany, many, many1, )
 
+import Control.Monad (liftM2, )
 
+
 pSP :: Parser Char
 pSP = char ' '
 
@@ -61,7 +62,7 @@
 dropLeadingLWS = dropWhile isLWSChar
 
 trimLWS :: String -> String
-trimLWS = dropWhileRev isLWSChar . dropLeadingLWS
+trimLWS = Rev.dropWhile isLWSChar . dropLeadingLWS
 
 isLWSChar :: Char -> Bool
 isLWSChar c = c == ' ' || c == '\t'
diff --git a/src/Network/MoHWS/Server.hs b/src/Network/MoHWS/Server.hs
--- a/src/Network/MoHWS/Server.hs
+++ b/src/Network/MoHWS/Server.hs
@@ -263,10 +263,10 @@
   proto <- BSD.getProtocolNumber "tcp"
   Exception.bracket
      (Socket.socket AF_INET Socket.Stream proto)
-     (\sock -> Socket.sClose sock)
+     (\sock -> Socket.close sock)
      (\sock -> do Socket.setSocketOption sock Socket.ReuseAddr 1
                   ok <- Util.catchSomeIOErrors isAlreadyInUseError
-                        (Socket.bindSocket sock addr >> return True)
+                        (Socket.bind sock addr >> return True)
                         (\e -> do logError st ("server: " ++ show e)
                                   IO.hPutStrLn IO.stderr $ show e
                                   return False)
diff --git a/src/Network/MoHWS/Utility.hs b/src/Network/MoHWS/Utility.hs
--- a/src/Network/MoHWS/Utility.hs
+++ b/src/Network/MoHWS/Utility.hs
@@ -39,11 +39,13 @@
 import Control.Monad (liftM, )
 import Control.Monad.Trans.Maybe (MaybeT(MaybeT), runMaybeT, )
 import Control.Monad.Fail (MonadFail)
+
+import qualified Data.List.Reverse.StrictElement as Rev
 import Data.Maybe.HT (toMaybe, )
 import Data.Maybe (fromMaybe, )
 import Data.Tuple.HT (mapSnd, )
 import Data.List (intersperse, )
-import Data.List.HT (switchL, switchR, maybePrefixOf, dropWhileRev, takeWhileRev, inits, tails, )
+import Data.List.HT (switchL, switchR, maybePrefixOf, inits, tails, )
 import Data.Ratio (numerator, )
 import Foreign.C.Error (getErrno, eNOENT, eNOTDIR, )
 import Network.Socket as Socket
@@ -127,12 +129,12 @@
 -- Get the directory component of a path
 -- FIXME: is this good enough?
 dirname :: FilePath -> FilePath
-dirname = dropWhileRev (/= '/')
+dirname = Rev.dropWhile (/= '/')
 
 -- Get the filename component of a path
 -- FIXME: probably System.FilePath should be used here.
 basename :: FilePath -> FilePath
-basename = takeWhileRev (/= '/')
+basename = Rev.takeWhile (/= '/')
 
 hasTrailingSlash :: FilePath -> Bool
 hasTrailingSlash =
