diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## Zip 0.1.1
+
+* Make decoding of CP437 faster.
+
 ## Zip 0.1.0
 
 * Initial release.
diff --git a/Codec/Archive/Zip/CP437.hs b/Codec/Archive/Zip/CP437.hs
--- a/Codec/Archive/Zip/CP437.hs
+++ b/Codec/Archive/Zip/CP437.hs
@@ -13,20 +13,21 @@
   ( decodeCP437 )
 where
 
+import Control.Arrow (first)
 import Data.ByteString (ByteString)
 import Data.Char
-import Data.Monoid
 import Data.Text (Text)
-import Data.Text.Lazy (toStrict)
 import Data.Word (Word8)
-import qualified Data.ByteString        as B
-import qualified Data.Text.Lazy.Builder as LB
+import qualified Data.ByteString as B
+import qualified Data.Text       as T
 
 -- | Decode a 'ByteString' containing CP 437 encoded text.
 
 decodeCP437 :: ByteString -> Text
-decodeCP437 = toStrict . LB.toLazyText . B.foldl' f mempty
-  where f xs b = xs <> LB.singleton (decodeByteCP437 b)
+decodeCP437 bs = T.unfoldrN
+  (B.length bs)
+  (fmap (first decodeByteCP437) . B.uncons)
+  bs
 
 -- | Decode single byte of CP437 encoded text.
 
diff --git a/zip.cabal b/zip.cabal
--- a/zip.cabal
+++ b/zip.cabal
@@ -31,7 +31,7 @@
 -- POSSIBILITY OF SUCH DAMAGE.
 
 name:                 zip
-version:              0.1.0
+version:              0.1.1
 cabal-version:        >= 1.10
 license:              BSD3
 license-file:         LICENSE.md
@@ -53,25 +53,26 @@
 
 library
   build-depends:      base             >= 4.8 && < 5
-                    , bytestring       >= 0.9
-                    , bzlib-conduit    >= 0.2
-                    , case-insensitive >= 1.2.0.2
-                    , cereal           >= 0.3
-                    , conduit          >= 1.1
-                    , conduit-extra    >= 1.1
-                    , containers       >= 0.5.6.2
-                    , digest
-                    , exceptions       >= 0.8
-                    , filepath         >= 1.2
-                    , mtl              >= 2.0
-                    , path             >= 0.5
-                    , path-io          >= 1.0.1
+                    , bytestring       >= 0.9 && < 0.11
+                    , bzlib-conduit    >= 0.2 && < 0.3
+                    , case-insensitive >= 1.2.0.2 && < 1.3
+                    , cereal           >= 0.3 && < 0.6
+                    , conduit          >= 1.1 && < 2
+                    , conduit-extra    >= 1.1 && < 2
+                    , containers       >= 0.5.6.2 && < 0.6
+                    , digest           < 0.1
+                    , exceptions       >= 0.6 && < 0.9
+                    , filepath         >= 1.2 && < 1.5
+                    , mtl              >= 2.0 && < 3
+                    , path             >= 0.5 && < 6
+                    , path-io          >= 1.0.1 && < 2
                     , plan-b           >= 0.2.0
-                    , resourcet        >= 1.0
-                    , semigroups       >= 0.5
-                    , text             >= 0.2
-                    , time             >= 1.4
-                    , transformers     >= 0.3
+                    , resourcet        >= 1.0 && < 2
+                    , text             >= 0.2 && < 1.3
+                    , time             >= 1.4 && < 1.7
+                    , transformers     >= 0.4 && < 0.6
+  if !impl(ghc >= 8.0)
+    build-depends:    semigroups       == 0.18.*
   default-extensions: RecordWildCards
                     , TupleSections
   exposed-modules:    Codec.Archive.Zip
@@ -93,19 +94,19 @@
   else
     ghc-options:      -O2 -Wall
   build-depends:      base             >= 4.8 && < 5
-                    , bytestring       >= 0.9
-                    , conduit          >= 1.1
-                    , containers       >= 0.5.6.2
-                    , exceptions       >= 0.8
-                    , filepath         >= 1.2
+                    , bytestring       >= 0.9 && < 0.11
+                    , conduit          >= 1.1 && < 2
+                    , containers       >= 0.5.6.2 && < 0.6
+                    , exceptions       >= 0.6 && < 0.9
+                    , filepath         >= 1.2 && < 1.5
                     , QuickCheck       >= 2.4 && < 3
-                    , hspec            >= 2.0
-                    , path             >= 0.5
-                    , path-io          >= 1.0.1
-                    , text             >= 0.2
-                    , time             >= 1.4
-                    , transformers     >= 0.3
-                    , zip              >= 0.1
+                    , hspec            >= 2.0 && < 3
+                    , path             >= 0.5 && < 6
+                    , path-io          >= 1.0.1 && < 2
+                    , text             >= 0.2 && < 1.3
+                    , time             >= 1.4 && < 1.7
+                    , transformers     >= 0.4 && < 0.6
+                    , zip              >= 0.1.1
   default-language:   Haskell2010
 
 benchmark bench
@@ -118,7 +119,7 @@
     ghc-options:      -O2 -Wall
   build-depends:      base             >= 4.8 && < 5
                     , criterion        >= 1.0
-                    , zip              >= 0.1
+                    , zip              >= 0.1.1
   default-language:   Haskell2010
 
 source-repository head
