diff --git a/sexp-grammar.cabal b/sexp-grammar.cabal
--- a/sexp-grammar.cabal
+++ b/sexp-grammar.cabal
@@ -1,5 +1,5 @@
 name:                sexp-grammar
-version:             2.3.3
+version:             2.3.3.1
 license:             BSD3
 license-file:        LICENSE
 author:              Yevhen Smolanka, Sergey Vinokurov
@@ -63,6 +63,7 @@
   build-depends:
       QuickCheck
     , base
+    , bytestring
     , containers
     , invertible-grammar
     , prettyprinter
@@ -73,7 +74,6 @@
     , tasty-hunit
     , tasty-quickcheck
     , text
-    , utf8-string
   main-is:           Main.hs
   hs-source-dirs:    test
   default-language:  Haskell2010
diff --git a/src/Language/Sexp/Encode.hs b/src/Language/Sexp/Encode.hs
--- a/src/Language/Sexp/Encode.hs
+++ b/src/Language/Sexp/Encode.hs
@@ -14,12 +14,11 @@
 import qualified Data.Text.Lazy as TL
 import qualified Data.Text.Lazy.Encoding as TL (encodeUtf8)
 import Data.ByteString.Lazy.Char8 (ByteString)
-#if !MIN_VERSION_bytestring(0,11,0)
-import Data.ByteString.Lazy.Builder.ASCII
-#else
+#if MIN_VERSION_bytestring(0,11,0)
 import Data.ByteString.Builder
+#else
+import Data.ByteString.Lazy.Builder.ASCII
 #endif
-
 
 #if !MIN_VERSION_base(4,11,0)
 import Data.Semigroup
diff --git a/src/Language/Sexp/Pretty.hs b/src/Language/Sexp/Pretty.hs
--- a/src/Language/Sexp/Pretty.hs
+++ b/src/Language/Sexp/Pretty.hs
@@ -1,6 +1,7 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE LambdaCase        #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
@@ -13,9 +14,16 @@
 import Data.Scientific
 import qualified Data.Text.Lazy as TL
 import Data.Text.Lazy.Encoding (encodeUtf8)
+
+#if MIN_VERSION_prettyprinter(1,7,0)
+import Prettyprinter
+import Prettyprinter.Internal (unsafeTextWithoutNewlines)
+import qualified Prettyprinter.Render.Text as Render
+#else
 import Data.Text.Prettyprint.Doc
 import Data.Text.Prettyprint.Doc.Internal (unsafeTextWithoutNewlines)
 import qualified Data.Text.Prettyprint.Doc.Render.Text as Render
+#endif
 
 import Language.Sexp.Types
 import Language.Sexp.Token (escape)
diff --git a/src/Language/Sexp/Token.hs b/src/Language/Sexp/Token.hs
--- a/src/Language/Sexp/Token.hs
+++ b/src/Language/Sexp/Token.hs
@@ -15,7 +15,12 @@
 #endif
 import Data.Text (Text)
 import qualified Data.Text.Lazy as TL
+
+#if MIN_VERSION_prettyprinter(1,7,0)
+import Prettyprinter
+#else
 import Data.Text.Prettyprint.Doc
+#endif
 
 import Language.Sexp.Types (Prefix(..))
 
diff --git a/src/Language/Sexp/Types.hs b/src/Language/Sexp/Types.hs
--- a/src/Language/Sexp/Types.hs
+++ b/src/Language/Sexp/Types.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                 #-}
 {-# LANGUAGE DeriveFoldable      #-}
 {-# LANGUAGE DeriveFunctor       #-}
 {-# LANGUAGE DeriveGeneric       #-}
@@ -30,7 +31,11 @@
 import Data.Functor.Foldable (cata)
 import Data.Scientific (Scientific)
 import Data.Text (Text)
+#if !MIN_VERSION_prettyprinter(1,7,0)
 import Data.Text.Prettyprint.Doc (Pretty (..), colon)
+#else
+import Prettyprinter (Pretty (..), colon)
+#endif
 import GHC.Generics
 
 ----------------------------------------------------------------------
@@ -65,6 +70,9 @@
 instance (Eq p) => Eq1 (LocatedBy p) where
   liftEq eq (p :< a) (q :< b) = p == q && a `eq` b
 
+instance NFData p => NFData1 (LocatedBy p) where
+  liftRnf f (p :< a) = rnf p `seq` f a
+
 location :: LocatedBy a e -> a
 location (a :< _) = a
 
@@ -129,5 +137,7 @@
     BraceListF as -> liftRnf f as
     ModifiedF q a -> rnf q `seq` f a
 
+#if !MIN_VERSION_deepseq(1,4,3)
 instance NFData1 (Compose (LocatedBy Position) SexpF) where
-  liftRnf f = liftRnf f . extract . getCompose
+  liftRnf f (Compose (p :< a)) = rnf p `seq` liftRnf f a
+#endif
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -23,13 +23,20 @@
 #endif
 
 import Control.Category
-import Data.ByteString.Lazy.UTF8 (fromString)
+import qualified Data.ByteString.Lazy.Char8 as B8
 import Data.Char
 import Data.Scientific
 import Data.Semigroup
 import qualified Data.Set as S
 import qualified Data.Text as TS
+import Data.Text.Encoding (encodeUtf8)
+
+#if MIN_VERSION_prettyprinter(1,7,0)
+import Prettyprinter (Pretty, pretty)
+#else
 import Data.Text.Prettyprint.Doc (Pretty, pretty)
+#endif
+
 import GHC.Generics
 import Test.QuickCheck ()
 import Test.Tasty
@@ -47,8 +54,8 @@
 
 import Debug.Trace
 
-parseSexp' :: String -> Either String Sexp
-parseSexp' input = Sexp.decode (fromString input)
+parseSexp' :: TS.Text -> Either String Sexp
+parseSexp' input = Sexp.decode (B8.fromStrict (encodeUtf8 input))
 
 instance Arbitrary Atom where
   arbitrary = oneof
