diff --git a/Web/Encodings.hs b/Web/Encodings.hs
--- a/Web/Encodings.hs
+++ b/Web/Encodings.hs
@@ -74,7 +74,6 @@
 import Data.Either (partitionEithers)
 import System.Directory (getTemporaryDirectory, removeFile)
 import System.IO
-import Control.Monad (foldM)
 
 -- | Encode all but unreserved characters with percentage encoding.
 --
@@ -474,125 +473,13 @@
     , sinkFinalize = \fp -> removeFile fp
     }
 
-type PieceReturn sink =
-    Either
-              (BL.ByteString, BL.ByteString)
-              (BS.ByteString, FileInfo BS.ByteString sink)
-
 data ParseState seed
     = PSBegin ([BS.ByteString] -> [BS.ByteString])
     | PSParam BL.ByteString BL.ByteString
     | PSFile BL.ByteString BL.ByteString BL.ByteString seed BS.ByteString
     | PSNothing
 instance Show (ParseState x) where
-    show (PSBegin x) = show ("PSBegin", B8.unpack $ B8.concat $ x [])
-    show (PSParam x y) = show ("PSParam", x, y)
-    show (PSFile x y z _ _) = show ("PSFile", x, y, z)
+    show (PSBegin x) = show ("PSBegin" :: String, B8.unpack $ B8.concat $ x [])
+    show (PSParam x y) = show ("PSParam" :: String, x, y)
+    show (PSFile x y z _ _) = show ("PSFile" :: String, x, y, z)
     show PSNothing = "PSNothing"
-
--- | Parse a single segment of a multipart/form-data POST.
-parsePiece' :: Sink x y
-            -> ParseState x
-            -> BS.ByteString
-            -> IO (ParseState x)
-parsePiece' sink (PSBegin front) bs =
-    case SL.takeUntilBlankMaybe $ BL.fromChunks $ front [bs] of
-        Nothing -> return $ PSBegin $ front . (:) bs
-        Just (headers', content) ->
-            let headers = map parseHeader headers'
-                name = lookupHeaderAttr
-                        (SL.pack "Content-Disposition")
-                        (SL.pack "name")
-                        headers
-                fname = lookupHeaderAttr
-                            (SL.pack "Content-Disposition")
-                            (SL.pack "filename")
-                            headers
-                ctype = lookupHeader (SL.pack "Content-Type") headers
-             in case (name, fname, ctype) of
-                    (Just name', Nothing, _) ->
-                        return $ PSParam name' content
-                    (Just name', Just fname', Just ctype') -> do
-                        seed <- sinkInit sink
-                        (seed', hasNewLine)
-                            <- foldM (sinkAppendNL sink) (seed, BS.empty)
-                             $ BL.toChunks content
-                        return $ PSFile name' fname' ctype' seed' hasNewLine
-                    _ -> return PSNothing
-parsePiece' _ PSNothing _ = return PSNothing
-parsePiece' _ (PSParam name content) bs =
-    return $ PSParam name $ BL.append content $ BL.fromChunks [bs]
-parsePiece' sink (PSFile name fname ctype seed newLine) bs = do
-    let (bs', newLine') = mychomp bs
-    seed' <- sinkAppend sink seed newLine
-    seed'' <- sinkAppend sink seed' bs'
-    return $ PSFile name fname ctype seed'' newLine'
-
-mychomp :: BS.ByteString -> (BS.ByteString, BS.ByteString)
-mychomp bs
-    | BS.null bs = (bs, BS.empty)
-    | B8.last bs == '\n' && BS.null (BS.init bs) = (BS.empty, bs)
-    | B8.last bs == '\n' && B8.last (BS.init bs) == '\r' =
-        (BS.init $ BS.init bs, B8.pack "\r\n")
-    | B8.last bs == '\n' = (BS.init bs, B8.pack "\n")
-    | otherwise = (bs, BS.empty)
-
--- | Removes one new line from end.
-sinkAppendNL :: Sink x y -> (x, BS.ByteString) -> BS.ByteString
-             -> IO (x, BS.ByteString)
-sinkAppendNL sink (seed, prev) bs = do
-    seed' <- sinkAppend sink seed prev
-    let (bs', prev') = mychomp bs
-    seed'' <- sinkAppend sink seed' bs'
-    return (seed'', prev')
-
-type Param = (BL.ByteString, BL.ByteString)
-type File y = (BS.ByteString, FileInfo BS.ByteString y)
-
-extractState :: Sink x y
-             -> ParseState x
-             -> IO (Maybe (PieceReturn y))
-extractState _ (PSBegin _) = return Nothing
-extractState _ PSNothing = return Nothing
-extractState _ (PSParam name val) =
-    return $ Just $ Left (name, SL.chomp val)
-extractState sink (PSFile name fname ctype seed _newLine) = do
-    output <- sinkClose sink seed
-    return $ Just $ Right (BS.concat $ BL.toChunks name, FileInfo
-        { fileName = BS.concat $ BL.toChunks fname
-        , fileContentType = BS.concat $ BL.toChunks ctype
-        , fileContent = output
-        })
-
-data HasBound = NoBound | MaybeBound | HasBound BS.ByteString BS.ByteString
-hasBound :: BS.ByteString -> BS.ByteString -> HasBound
-hasBound bound content =
-    case notEmpty $ BS.breakSubstring fullBound1 content of
-        Just (before, after) ->
-            let after' = BS.drop (BS.length fullBound1) after
-             in HasBound before $ SL.chompStart after'
-        Nothing ->
-          case notEmpty $ BS.breakSubstring fullBound2 content of
-            Just (before, after) ->
-                let after' = BS.drop (BS.length fullBound2) after
-                 in HasBound before $ SL.chompStart after'
-            Nothing ->
-              case notEmpty $ BS.breakSubstring fullBound3 content of
-                Just (before, after) ->
-                  let after' = BS.drop (BS.length fullBound3) after
-                   in HasBound before $ SL.chompStart after'
-                Nothing ->
-                    if endsWithBound
-                        then MaybeBound
-                        else NoBound
-      where
-        fullBound' = B8.cons '-' $ B8.cons '-' bound
-        fullBound1 = fullBound' `B8.snoc` '\n'
-        fullBound2 = fullBound' `B8.snoc` '\r' `B8.snoc` '\n'
-        fullBound3 = fullBound' `B8.snoc` '-' `B8.snoc` '-'
-        endsWithBound =
-            or $ map (\x -> x `BS.isSuffixOf` content)
-               $ (BS.inits fullBound2 ++ BS.inits fullBound3)
-        notEmpty (x, y)
-            | BS.null y = Nothing
-            | otherwise = Just (x, y)
diff --git a/web-encodings.cabal b/web-encodings.cabal
--- a/web-encodings.cabal
+++ b/web-encodings.cabal
@@ -1,5 +1,5 @@
 name:            web-encodings
-version:         0.3.0
+version:         0.3.0.1
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -21,7 +21,7 @@
                      time >= 1.1.2.4 && < 1.3,
                      old-locale >= 1.0.0.1 && < 1.1,
                      bytestring >= 0.9.1.4 && < 0.10,
-                     text >= 0.5 && < 0.8,
+                     text >= 0.5 && < 0.9,
                      failure >= 0.0.0 && < 0.2,
                      directory >= 1 && < 1.1
     exposed-modules: Web.Encodings
