diff --git a/ejdb2-binding.cabal b/ejdb2-binding.cabal
--- a/ejdb2-binding.cabal
+++ b/ejdb2-binding.cabal
@@ -3,7 +3,7 @@
 category:            Database
 description:         Binding to EJDB2 C library, an embedded JSON noSQL database. Package requires libejdb2 to build. Please see the README on GitHub at <https://github.com/cescobaz/ejdb2haskell#readme>
 synopsis:            Binding to EJDB2 C library, an embedded JSON noSQL database
-version:             0.3.0.1
+version:             0.3.0.2
 license:             MIT
 license-file:        LICENSE
 homepage:            https://github.com/cescobaz/ejdb2haskell#readme
@@ -38,7 +38,7 @@
                      , Database.EJDB2.Bindings.Types.EJDB
                      , Database.EJDB2.Bindings.Types.EJDBExec
                      , Database.EJDB2.Bindings.Types.EJDBDoc
-  build-depends:       base >=4.12 && <4.14
+  build-depends:       base >=4.12 && <=4.15
                      , bytestring ^>=0.10.10.0
                      , aeson ^>=1.4.6.0
                      , unordered-containers ^>=0.2.10.0
@@ -65,7 +65,7 @@
                        IndexTests
                        OnlineBackupTests
                        FoldTests
-  build-depends:       base >=4.12 && <4.14
+  build-depends:       base >=4.12 && <=4.15
                      , tasty ^>=1.2.3
                      , tasty-hunit ^>=0.10.0.2
                      , aeson ^>=1.4.6.0
diff --git a/src/Database/EJDB2/JBL.hs b/src/Database/EJDB2/JBL.hs
--- a/src/Database/EJDB2/JBL.hs
+++ b/src/Database/EJDB2/JBL.hs
@@ -16,7 +16,7 @@
 import           Foreign.Marshal.Array
 
 decode :: Aeson.FromJSON a => JBL -> IO (Maybe a)
-decode jbl = Aeson.decode <$> decodeToByteString jbl
+decode jbl = Aeson.decode' <$> decodeToByteString jbl
 
 decodeToByteString :: JBL -> IO BSL.ByteString
 decodeToByteString jbl = do
@@ -28,22 +28,16 @@
 
 printer :: IORef BSL.ByteString -> JBLJSONPrinter
 printer ref _ 0 (CChar ch) _ _ = do
-    modifyIORef' ref $ \string -> BSL.cons word string
+    modifyIORef' ref (BSL.cons' (fromIntegral ch))
     return 0
-  where
-    word = fromIntegral ch
 printer ref buffer size _ _ _
-    | size > 0 = do
-        array <- peekArray (fromIntegral size) buffer
-        printerArray ref array
-    | otherwise = do
-        array <- peekArray0 (CChar 0) buffer
-        printerArray ref array
+    | size > 0 = peekArray (fromIntegral size) buffer >>= printerArray ref
+    | otherwise = peekArray0 (CChar 0) buffer >>= printerArray ref
 
 printerArray :: IORef BSL.ByteString -> [CChar] -> IO Result.RC
 printerArray ref array = do
     modifyIORef' ref $ \string ->
-        foldl (\result (CChar ch) -> BSL.cons (fromIntegral ch) result)
+        foldl (\result (CChar ch) -> BSL.cons' (fromIntegral ch) result)
               string
               array
     return 0
