diff --git a/json-rpc-generic.cabal b/json-rpc-generic.cabal
--- a/json-rpc-generic.cabal
+++ b/json-rpc-generic.cabal
@@ -1,5 +1,5 @@
 name:                json-rpc-generic
-version:             0.2.1.5
+version:             0.2.1.6
 synopsis:            Generic encoder and decode for JSON-RPC
 description:         This package contains generic encoder and decode for JSON-RPC
 homepage:            http://github.com/khibino/haskell-json-rpc-generic
@@ -7,12 +7,16 @@
 license-file:        LICENSE
 author:              Kei Hibino
 maintainer:          ex8k.hibino@gmail.com
-copyright:           Copyright (c) 2016-2017 Kei Hibino
+copyright:           Copyright (c) 2016-2021 Kei Hibino
 category:            Network
 build-type:          Simple
 -- extra-source-files:
 cabal-version:       >=1.10
-tested-with:           GHC == 8.4.1, GHC == 8.4.2, GHC == 8.4.3
+tested-with:           GHC == 9.0.1
+                     , GHC == 8.10.1, GHC == 8.10.2, GHC == 8.10.3, GHC == 8.10.4
+                     , GHC == 8.8.1, GHC == 8.8.2, GHC == 8.8.3, GHC == 8.8.4
+                     , GHC == 8.6.1, GHC == 8.6.2, GHC == 8.6.3, GHC == 8.6.4, GHC == 8.6.5
+                     , GHC == 8.4.1, GHC == 8.4.2, GHC == 8.4.3, GHC == 8.4.4
                      , GHC == 8.2.1, GHC == 8.2.2
                      , GHC == 8.0.1, GHC == 8.0.2
                      , GHC == 7.10.1, GHC == 7.10.2, GHC == 7.10.3
@@ -33,22 +37,11 @@
   other-modules:
                        Data.JsonRpc.Integral
 
-  other-extensions:
-                       TypeOperators
-                       FlexibleContexts
-                       OverloadedStrings
-                       DeriveFunctor
-                       DeriveFoldable
-                       DeriveTraversable
-                       -- DeriveGeneric  -- compat with Cabal 1.16
-                       StandaloneDeriving
-
   build-depends:         base >=4.6 && <5
                        , transformers
                        , containers
                        , unordered-containers
                        , text
-                       , dlist
                        , scientific
                        , vector >=0.10
                        , aeson >=0.7
diff --git a/src/Data/JsonRpc/Generic.hs b/src/Data/JsonRpc/Generic.hs
--- a/src/Data/JsonRpc/Generic.hs
+++ b/src/Data/JsonRpc/Generic.hs
@@ -12,13 +12,12 @@
   ) where
 
 import GHC.Generics
-import Control.Applicative ((<$>), pure, (<*>), (<*), empty, (<|>))
+import Control.Applicative ((<$>), (<*>), (<*), empty, (<|>))
 import Control.Monad (guard)
 import Control.Monad.Trans.Class (lift)
 import Control.Monad.Trans.Writer (Writer, runWriter, tell)
 import Control.Monad.Trans.State (StateT, runStateT, get, put)
-import Data.DList (DList)
-import qualified Data.DList as DList
+import Data.Monoid (Endo (..))
 import Data.Set ((\\))
 import qualified Data.Set as Set
 import qualified Data.HashMap.Strict as HashMap
@@ -51,7 +50,7 @@
 
 
 type FieldName = String
-type FieldsW = Writer (DList FieldName)
+type FieldsW = Writer (Endo [FieldName])
 
 class GFieldSetJSON f where
   gFieldSet :: FieldsW (f a)
@@ -84,7 +83,7 @@
                  => S1 s a p
                  -> FieldsW (S1 s a p)
 saveQueriedField m1  =  do
-  tell (pure $ selName m1)
+  tell (Endo (selName m1 :))
   return m1
 
 instance GFieldSetJSON (K1 i a) where
@@ -99,7 +98,7 @@
   d rpcOpts opts v@(Object m)  =  do
     let (px, fs)  =  runWriter gFieldSet
         inv  =  Set.fromList (HashMap.keys m) \\
-                Set.fromList (map (T.pack . fieldLabelModifier opts) $ DList.toList fs)
+                Set.fromList (map (T.pack . fieldLabelModifier opts) $ appEndo fs [])
     guard (allowNonExistField rpcOpts || Set.null inv)
       <|> fail ("object has illegal field: " ++ show (Set.toList inv))
     j  <-  genericParseJSON opts v
diff --git a/test/Instances.hs b/test/Instances.hs
--- a/test/Instances.hs
+++ b/test/Instances.hs
@@ -3,12 +3,13 @@
 
 module Instances (Example (..)) where
 
-import Test.QuickCheck (Arbitrary (..), Gen, frequency, choose)
+import Test.QuickCheck (Arbitrary (..), Gen, frequency, choose, listOf)
 
 import GHC.Generics (Generic)
 import Control.Applicative ((<$>), pure, (<*>))
 import Data.Text (Text)
 import qualified Data.Text as T
+import qualified Data.Text.Encoding as T
 import Data.Aeson (FromJSON, ToJSON)
 import qualified Data.Aeson.Types as Aeson
 
@@ -20,14 +21,25 @@
    genericParseJSONRPC, defaultJsonRpcOptions, )
 
 
+{- decoder of some text versions are COMPLETELY BROKEN !!
+   only 7bit cases are working -}
+genString :: Gen String
+genString
+  | good       =  arbitrary
+  | otherwise  =  gen7bits
+  where
+    x = T.pack "\128"
+    good = T.decodeUtf8' (T.encodeUtf8 x) == Right x
+    gen7bits = listOf $ choose ('\000', '\127')
+
 genText :: Gen Text
-genText = T.pack <$> arbitrary
+genText = T.pack <$> genString
 
 instance Arbitrary Id where
   arbitrary =
     frequency
     [ (3, NumberId <$> arbitrary)
-    , (2, StringId . T.pack <$> arbitrary)
+    , (2, StringId . T.pack <$> genString)
     ]
 
 instance Arbitrary a => Arbitrary (Request a) where
@@ -90,7 +102,6 @@
     , (3, Response . Left  <$> arbitrary)
     ]
 
-
 data Example =
   Example
   { p :: Int
@@ -104,8 +115,8 @@
 instance Arbitrary Example where
   arbitrary =
     Example
-    <$> arbitrary <*> arbitrary <*> arbitrary
-    <*> arbitrary <*> arbitrary <*> arbitrary
+    <$> arbitrary <*> genString <*> arbitrary
+    <*> arbitrary <*> arbitrary <*> frequency [(1, return Nothing), (3, Just <$> genString)]
 
 instance FromJSON Example where
   parseJSON = genericParseJSONRPC defaultJsonRpcOptions Aeson.defaultOptions
diff --git a/test/testMain.hs b/test/testMain.hs
--- a/test/testMain.hs
+++ b/test/testMain.hs
@@ -1,7 +1,7 @@
 
 import qualified Eq
 import qualified Iso
-import Test.QuickCheck.Simple (defaultMain')
+import Test.QuickCheck.Simple (defaultMain_)
 
 main :: IO ()
-main = defaultMain' True $ Eq.tests ++ Iso.tests
+main = defaultMain_ True $ Eq.tests ++ Iso.tests
