diff --git a/Network/CGI/Monad.hs b/Network/CGI/Monad.hs
--- a/Network/CGI/Monad.hs
+++ b/Network/CGI/Monad.hs
@@ -55,7 +55,7 @@
     typeOf _ = mkTyConApp (mkTyCon "Network.CGI.Monad.CGIT") 
                 [typeOf1 (undefined :: m a), typeOf (undefined :: a)]
 
-instance Monad m => Functor (CGIT m) where
+instance (Functor m, Monad m) => Functor (CGIT m) where
     fmap f c = CGIT (fmap f (unCGIT c))
 
 instance Monad m => Monad (CGIT m) where
diff --git a/Network/CGI/Protocol.hs b/Network/CGI/Protocol.hs
--- a/Network/CGI/Protocol.hs
+++ b/Network/CGI/Protocol.hs
@@ -39,7 +39,7 @@
 import Data.Maybe (fromMaybe, listToMaybe, isJust)
 import Network.URI (unEscapeString,escapeURIString,isUnescapedInURI)
 import System.Environment (getEnvironment)
-import System.IO (Handle, hPutStrLn, stderr, hFlush)
+import System.IO (Handle, hPutStrLn, stderr, hFlush, hSetBinaryMode)
 
 import qualified Data.ByteString.Lazy.Char8 as BS
 import Data.ByteString.Lazy.Char8 (ByteString)
@@ -104,7 +104,8 @@
         -> (CGIRequest -> m (Headers, CGIResult)) -- ^ CGI action
         -> m ()
 hRunCGI env hin hout f = 
-    do inp <- liftIO $ BS.hGetContents hin
+    do liftIO $ hSetBinaryMode hin True
+       inp <- liftIO $ BS.hGetContents hin
        outp <- runCGIEnvFPS env inp f
        liftIO $ BS.hPut hout outp
        liftIO $ hFlush hout
diff --git a/cgi.cabal b/cgi.cabal
--- a/cgi.cabal
+++ b/cgi.cabal
@@ -1,5 +1,5 @@
 Name: cgi
-Version: 3001.1.8.1
+Version: 3001.1.8.2
 Copyright: Bjorn Bringert, Andy Gill, Anders Kaseorg, Ian Lynagh, 
            Erik Meijer, Sven Panne, Jeremy Shaw
 Category: Network
