diff --git a/Network/HTTP/Server/HtmlForm.hs b/Network/HTTP/Server/HtmlForm.hs
--- a/Network/HTTP/Server/HtmlForm.hs
+++ b/Network/HTTP/Server/HtmlForm.hs
@@ -17,6 +17,8 @@
   , fromRequest
   ) where
 
+import qualified Data.Text as T
+
 import Codec.MIME.Parse
 import Codec.MIME.Type
 import Network.HTTP
@@ -61,7 +63,7 @@
 
   where toMap mv = case mime_val_content mv of
                      Multi vs -> concatMap toMap vs
-                     Single v -> [ (UTF8.decodeString k, v)
+                     Single v -> [ (T.unpack k,T.unpack v)
                                               | k <- keys (mime_val_disp mv) ]
 
         -- XXX: should we check the type?
@@ -70,6 +72,6 @@
 
 mime_request :: Request String -> MIMEValue
 mime_request req
-  = let hdrs = map (\ (Header a b) -> (show a, b)) (rqHeaders req)
-        body = rqBody req
+  = let hdrs = map (\ (Header a b) -> MIMEParam { paramName = T.pack (show a), paramValue = T.pack b }) (rqHeaders req)
+        body = T.pack $ rqBody req
     in parseMIMEBody hdrs body
diff --git a/http-server.cabal b/http-server.cabal
--- a/http-server.cabal
+++ b/http-server.cabal
@@ -1,5 +1,5 @@
 name:          http-server
-version:       1.0.3
+version:       1.0.4
 category:      Network
 synopsis:      A library for writing Haskell web servers.
 description:   A library for writing Haskell web servers.
@@ -36,7 +36,8 @@
     mime        >= 0.3      && < 2,
     network     >= 2.4.0.0  && < 3,
     url         >= 2        && < 3,
-    utf8-string >= 0.3.4    && < 2
+    utf8-string >= 0.3.4    && < 2,
+    text        >= 1.0
 
   if !os(windows)
     build-depends: unix >= 2 && < 3
