diff --git a/dormouse-client.cabal b/dormouse-client.cabal
--- a/dormouse-client.cabal
+++ b/dormouse-client.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: ba447e997d78582de45b1d7a4371396f5daed044c73681fa6b1a1e5f06f57aa9
+-- hash: 53a8941fce30957b33c0c2573f20f976e663b6a0d21e6feed28a68ff8b5d68e3
 
 name:           dormouse-client
-version:        0.1.0.0
+version:        0.1.0.1
 synopsis:       Simple, type-safe and testable HTTP client
 description:    An HTTP client designed to be productive, easy to use, easy to test, flexible and safe!
                 .
@@ -76,7 +76,7 @@
     , streamly >=0.7.2 && <0.8
     , streamly-bytestring >=0.1.2 && <0.2
     , template-haskell >=2.15.0 && <3.0.0
-    , text >=1.2.3 && <2.0.0
+    , text >=1.2.4 && <2.0.0
   default-language: Haskell2010
 
 test-suite dormouse-client-test
@@ -96,8 +96,10 @@
       Dormouse.Client.Test.Class
       Dormouse.Client.Types
       Dormouse.Client.Generators.Json
+      Dormouse.Client.Generators.Text
       Dormouse.Client.Generators.UriComponents
       Dormouse.Client.Headers.MediaTypeSpec
+      Dormouse.Client.PayloadSpec
       Dormouse.Client.StatusSpec
       Dormouse.Client.UrlReqSpec
       Dormouse.ClientSpec
@@ -106,7 +108,7 @@
       src
       test
   default-extensions: OverloadedStrings MultiParamTypeClasses ScopedTypeVariables FlexibleContexts
-  ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
+  ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall -fdicts-strict
   build-depends:
       aeson >=1.4.2 && <2.0.0
     , attoparsec >=0.13.2.4 && <0.14
@@ -129,6 +131,6 @@
     , streamly >=0.7.2 && <0.8
     , streamly-bytestring >=0.1.2 && <0.2
     , template-haskell >=2.15.0 && <3.0.0
-    , text >=1.2.3 && <2.0.0
+    , text >=1.2.4 && <2.0.0
     , vector >=0.12.0.3 && <0.13
   default-language: Haskell2010
diff --git a/test/Dormouse/Client/Generators/Text.hs b/test/Dormouse/Client/Generators/Text.hs
new file mode 100644
--- /dev/null
+++ b/test/Dormouse/Client/Generators/Text.hs
@@ -0,0 +1,21 @@
+module Dormouse.Client.Generators.Text 
+  ( genLatin1BS
+  , genUtf8BS
+  )
+  where
+
+import Hedgehog
+import qualified Hedgehog.Gen as Gen
+import Data.ByteString
+import Data.Text.Encoding
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as BS8
+
+genLatin1BS :: Range Int -> Gen ByteString
+genLatin1BS range = do
+  t <- Gen.text range Gen.latin1 
+  pure . BS8.pack . T.unpack $ t
+
+genUtf8BS :: Range Int -> Gen ByteString
+genUtf8BS range = 
+  Gen.utf8 range Gen.unicode
diff --git a/test/Dormouse/Client/PayloadSpec.hs b/test/Dormouse/Client/PayloadSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Dormouse/Client/PayloadSpec.hs
@@ -0,0 +1,63 @@
+module Dormouse.Client.PayloadSpec
+  ( spec
+  ) where
+
+import Control.Monad.IO.Class
+import qualified Data.Map as Map
+import Data.Text.Encoding
+import Dormouse.Client.Types
+import Dormouse.Client.Generators.Text
+import Dormouse.Client.Payload
+
+import Streamly
+import qualified Streamly.Prelude as S
+
+import Data.Proxy
+
+import Test.Hspec
+import Test.Hspec.Hedgehog
+import qualified Hedgehog.Range as Range
+import qualified Streamly.External.ByteString as SEB
+
+spec :: Spec
+spec = before setup $ do
+  describe "decodeText" $ do
+    it "successfully decodes latin-1 text for iso-8859-1 charset" $ \sizeRanges -> do
+      hedgehog $ do
+        txt <- forAll . genLatin1BS $ sizeRanges
+        let 
+          resp = HttpResponse 
+            { responseStatusCode = 200
+            , responseHeaders = Map.fromList [("Content-Type", "text/plain; charset=iso-8859-1")]
+            , responseBody = S.unfold SEB.read txt
+            }
+          expectedLatin1Text = decodeLatin1 txt
+        resp' <- liftIO . deserialiseRequest html $ resp
+        responseBody resp' === expectedLatin1Text
+    it "successfully decodes utf8 text for utf8 charset" $ \sizeRanges -> do
+      hedgehog $ do
+        txt <- forAll . genUtf8BS $ sizeRanges
+        let 
+          resp = HttpResponse 
+            { responseStatusCode = 200
+            , responseHeaders = Map.fromList [("Content-Type", "text/plain; charset=utf8")]
+            , responseBody = S.unfold SEB.read txt
+            }
+          expectedUtf8Text = decodeUtf8 txt
+        resp' <- liftIO . deserialiseRequest html $ resp
+        responseBody resp' === expectedUtf8Text
+    it "successfully decodes utf8 text if no explicit charset applied" $ \sizeRanges -> do
+      hedgehog $ do
+        txt <- forAll . genUtf8BS $ sizeRanges
+        let 
+          resp = HttpResponse 
+            { responseStatusCode = 200
+            , responseHeaders = Map.empty
+            , responseBody = S.unfold SEB.read txt
+            }
+          expectedUtf8Text = decodeUtf8 txt
+        resp' <- liftIO . deserialiseRequest html $ resp
+        responseBody resp' === expectedUtf8Text
+  where
+    setup = do
+      return $ Range.exponential 0 100000
