diff --git a/hack2-handler-snap-server.cabal b/hack2-handler-snap-server.cabal
--- a/hack2-handler-snap-server.cabal
+++ b/hack2-handler-snap-server.cabal
@@ -1,5 +1,5 @@
 Name:                 hack2-handler-snap-server
-Version:              2011.10.30
+Version:              2012.1.19
 Build-type:           Simple
 Synopsis:             Hack2 Snap server handler
 Description:          Hack2 Snap server handler
@@ -20,7 +20,7 @@
                     , network
                     , bytestring
                     , data-default >= 0.2
-                    , hack2 >= 2011.6.20
+                    , hack2 >= 2012.1.19
                     , containers
                     , mtl
                     , enumerator
diff --git a/src/Hack2/Handler/SnapServer.hs b/src/Hack2/Handler/SnapServer.hs
--- a/src/Hack2/Handler/SnapServer.hs
+++ b/src/Hack2/Handler/SnapServer.hs
@@ -39,28 +39,31 @@
 import System.Directory (createDirectory, doesDirectoryExist)
 import Control.Monad (when)
 
-{-
 
-{  requestMethod  :: RequestMethod
-,  scriptName     :: ByteString
-,  pathInfo       :: ByteString
-,  queryString    :: ByteString
-,  serverName     :: ByteString
-,  serverPort     :: Int
-,  httpHeaders    :: [(ByteString, ByteString)]
-,  hackVersion    :: (Int, Int, Int)
-,  hackUrlScheme  :: HackUrlScheme
-,  hackInput      :: HackEnumerator
-,  hackErrors     :: HackErrors
-,  hackHeaders    :: [(ByteString, ByteString)]
+-- backports from earlier hack2 utils
 
--}
+import qualified Data.ByteString.Lazy.Char8 as Lazy
+import qualified Data.Map as M
 
+import qualified Data.ByteString.Char8 as Strict
 
+import qualified Data.Enumerator.Binary as EB
+import qualified Data.Enumerator.List as EL
+
+import Data.Enumerator (run_, enumList, Enumerator, ($$))
+
+fromEnumerator :: Monad m => Enumerator Strict.ByteString m Lazy.ByteString -> m Lazy.ByteString
+fromEnumerator m = run_ - m $$ EB.consume
+
+toEnumerator :: Monad m => Lazy.ByteString -> Enumerator Strict.ByteString m a
+toEnumerator = enumList 1 < Lazy.toChunks
+
 requestToEnv :: Snap.Request -> IO Env
 requestToEnv request = do
   (Snap.SomeEnumerator some_enumerator) <- readIORef - request.SnapInternal.rqBody
   
+  _requestBody <- fromEnumerator some_enumerator
+  
   return - def
   
     {
@@ -72,7 +75,7 @@
     , serverPort     = request.Snap.rqServerPort
     , httpHeaders    = request.SnapInternal.rqHeaders.Snap.Headers.toList.map caseInsensitiveHeaderToHeader
     , hackUrlScheme  = if request.Snap.rqIsSecure then HTTPS else HTTP
-    , hackInput      = HackEnumerator some_enumerator
+    , hackInput      = _requestBody.l2s
     , hackHeaders    = 
       [
         ("RemoteHost", request.Snap.rqRemoteAddr)
@@ -103,7 +106,7 @@
   Snap.emptyResponse
     . Snap.setResponseCode (response.status)
     . (\r -> r { SnapInternal.rspHeaders = response.headers.map headerToCaseInsensitiveHeader.Snap.Headers.fromList })
-    . Snap.setResponseBody (response.body.unHackEnumerator $= EL.map fromByteString)
+    . Snap.setResponseBody (response.body.s2l.toEnumerator $= EL.map fromByteString)
 
 
 
