diff --git a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor.hs b/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor.hs
deleted file mode 100644
--- a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor.hs
+++ /dev/null
@@ -1,90 +0,0 @@
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE InstanceSigs          #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-
-module HaskellWorks.Data.Json.Simple.Cursor
-  ( JsonCursor(..)
-  , jsonCursorPos
-  ) where
-
-import Data.String
-import Data.Word
-import HaskellWorks.Data.FromByteString
-import HaskellWorks.Data.FromForeignRegion
-import HaskellWorks.Data.Positioning
-import HaskellWorks.Data.RankSelect.Base.Rank0
-import HaskellWorks.Data.RankSelect.Base.Rank1
-import HaskellWorks.Data.RankSelect.Base.Select1
-import HaskellWorks.Data.RankSelect.CsPoppy
-import HaskellWorks.Data.TreeCursor
-import Prelude                                   hiding (drop)
-
-import qualified Data.ByteString                                as BS
-import qualified Data.ByteString.Char8                          as BSC
-import qualified Data.ByteString.Internal                       as BSI
-import qualified Data.Vector.Storable                           as DVS
-import qualified Foreign.ForeignPtr                             as F
-import qualified HaskellWorks.Data.BalancedParens               as BP
-import qualified HaskellWorks.Data.BalancedParens.RangeMin      as RM
-import qualified HaskellWorks.Data.Json.Simple.Cursor.SemiIndex as SI
-
-data JsonCursor t v w = JsonCursor
-  { cursorText     :: !t
-  , interests      :: !v
-  , balancedParens :: !w
-  , cursorRank     :: !Count
-  }
-  deriving (Eq, Show)
-
-instance FromByteString (JsonCursor BS.ByteString (DVS.Vector Word64) (BP.SimpleBalancedParens (DVS.Vector Word64))) where
-  fromByteString bs = JsonCursor
-    { cursorText      = bs
-    , interests       = ib
-    , balancedParens  = BP.SimpleBalancedParens bp
-    , cursorRank      = 1
-    }
-    where SI.SemiIndex _ ib bp = SI.buildSemiIndex bs
-
-instance FromByteString (JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)) where
-  fromByteString bs = JsonCursor
-    { cursorText      = bs
-    , interests       = makeCsPoppy ib
-    , balancedParens  = RM.mkRangeMin (makeCsPoppy bp)
-    , cursorRank      = 1
-    }
-    where SI.SemiIndex _ ib bp = SI.buildSemiIndex bs
-
-instance FromForeignRegion (JsonCursor BS.ByteString (DVS.Vector Word64) (BP.SimpleBalancedParens (DVS.Vector Word64))) where
-  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (F.castForeignPtr fptr) offset size)
-
-instance FromForeignRegion (JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)) where
-  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (F.castForeignPtr fptr) offset size)
-
-instance IsString (JsonCursor BS.ByteString (DVS.Vector Word64) (BP.SimpleBalancedParens (DVS.Vector Word64))) where
-  fromString = fromByteString . BSC.pack
-
-instance IsString (JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)) where
-  fromString = fromByteString . BSC.pack
-
-instance (BP.BalancedParens u, Rank1 u, Rank0 u) => TreeCursor (JsonCursor t v u) where
-  firstChild :: JsonCursor t v u -> Maybe (JsonCursor t v u)
-  firstChild k = let mq = BP.firstChild (balancedParens k) (cursorRank k) in (\q -> k { cursorRank = q }) <$> mq
-
-  nextSibling :: JsonCursor t v u -> Maybe (JsonCursor t v u)
-  nextSibling k = (\q -> k { cursorRank = q }) <$> BP.nextSibling (balancedParens k) (cursorRank k)
-
-  parent :: JsonCursor t v u -> Maybe (JsonCursor t v u)
-  parent k = let mq = BP.parent (balancedParens k) (cursorRank k) in (\q -> k { cursorRank = q }) <$> mq
-
-  depth :: JsonCursor t v u -> Maybe Count
-  depth k = BP.depth (balancedParens k) (cursorRank k)
-
-  subtreeSize :: JsonCursor t v u -> Maybe Count
-  subtreeSize k = BP.subtreeSize (balancedParens k) (cursorRank k)
-
-jsonCursorPos :: (Rank1 w, Select1 v) => JsonCursor s v w -> Position
-jsonCursorPos k = toPosition (select1 ik (rank1 bpk (cursorRank k)) - 1)
-  where ik  = interests k
-        bpk = balancedParens k
diff --git a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Fast.hs b/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Fast.hs
deleted file mode 100644
--- a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Fast.hs
+++ /dev/null
@@ -1,35 +0,0 @@
-{-# LANGUAGE FlexibleInstances    #-}
-{-# LANGUAGE TypeSynonymInstances #-}
-
-module HaskellWorks.Data.Json.Simple.Cursor.Fast
-  ( fromByteString
-  , fromForeignRegion
-  , fromString
-  ) where
-
-import Foreign.ForeignPtr
-import HaskellWorks.Data.Json.Simple.Cursor
-import HaskellWorks.Data.RankSelect.CsPoppy
-
-import qualified Data.ByteString                                      as BS
-import qualified Data.ByteString.Char8                                as BSC
-import qualified Data.ByteString.Internal                             as BSI
-import qualified HaskellWorks.Data.BalancedParens.RangeMin            as RM
-import qualified HaskellWorks.Data.FromForeignRegion                  as F
-import qualified HaskellWorks.Data.Json.Simple.Cursor.Internal.IbBp   as J
-import qualified HaskellWorks.Data.Json.Simple.Cursor.Internal.ToIbBp as J
-
-fromByteString :: BS.ByteString -> JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)
-fromByteString bs = JsonCursor
-  { cursorText      = bs
-  , interests       = makeCsPoppy ib
-  , balancedParens  = RM.mkRangeMin (makeCsPoppy bp)
-  , cursorRank      = 1
-  }
-  where J.IbBp ib bp = J.toIbBp bs
-
-fromForeignRegion :: F.ForeignRegion -> JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)
-fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)
-
-fromString :: String -> JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)
-fromString = fromByteString . BSC.pack
diff --git a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/IbBp.hs b/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/IbBp.hs
deleted file mode 100644
--- a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/IbBp.hs
+++ /dev/null
@@ -1,10 +0,0 @@
-module HaskellWorks.Data.Json.Simple.Cursor.Internal.IbBp where
-
-import Data.Word
-
-import qualified Data.Vector.Storable as DVS
-
-data IbBp = IbBp
-  { ib :: DVS.Vector Word64
-  , bp :: DVS.Vector Word64
-  }
diff --git a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/ToIbBp.hs b/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/ToIbBp.hs
deleted file mode 100644
--- a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/ToIbBp.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-module HaskellWorks.Data.Json.Simple.Cursor.Internal.ToIbBp where
-
-import qualified Data.ByteString                                    as BS
-import qualified HaskellWorks.Data.Json.Simple.Cursor.Internal.IbBp as Z
-import qualified HaskellWorks.Data.Json.Simple.Cursor.SemiIndex     as J
-
-class ToIbBp a where
-  toIbBp :: a -> Z.IbBp
-
-instance ToIbBp BS.ByteString where
-  toIbBp bs = Z.IbBp ib bp
-    where J.SemiIndex _ ib bp = J.buildSemiIndex bs
diff --git a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/Word8.hs b/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/Word8.hs
deleted file mode 100644
--- a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/Word8.hs
+++ /dev/null
@@ -1,72 +0,0 @@
-module HaskellWorks.Data.Json.Simple.Cursor.Internal.Word8 where
-
-import Data.Word
-import Data.Word8 hiding (isDigit)
-
-import qualified Data.Char as C
-
-isLeadingDigit :: Word8 -> Bool
-isLeadingDigit w = w == _hyphen || (w >= _0 && w <= _9)
-
-isTrailingDigit :: Word8 -> Bool
-isTrailingDigit w = w == _plus || w == _hyphen || (w >= _0 && w <= _9) || w == _period || w == _E || w == _e
-
-isAlphabetic :: Word8 -> Bool
-isAlphabetic w = (w >= _A && w <= _Z) || (w >= _a && w <= _z)
-
-isDigit :: Word8 -> Bool
-isDigit w = w >= _0 && w <= _9
-
-wIsJsonNumberDigit :: Word8 -> Bool
-wIsJsonNumberDigit w = (w >= _0 && w <= _9) || w == _hyphen
-
-doubleQuote :: Word8
-doubleQuote = fromIntegral (C.ord '"')
-
-backSlash :: Word8
-backSlash = fromIntegral (C.ord '\\')
-
-openBrace :: Word8
-openBrace = fromIntegral (C.ord '{')
-
-closeBrace :: Word8
-closeBrace = fromIntegral (C.ord '}')
-
-openBracket :: Word8
-openBracket = fromIntegral (C.ord '[')
-
-closeBracket :: Word8
-closeBracket = fromIntegral (C.ord ']')
-
-comma :: Word8
-comma = fromIntegral (C.ord ',')
-
-colon :: Word8
-colon = fromIntegral (C.ord ':')
-
-isPeriod :: Word8 -> Bool
-isPeriod w = w == 46
-
-isMinus :: Word8 -> Bool
-isMinus w = w == 45
-
-isPlus :: Word8 -> Bool
-isPlus w = w == 43
-
-isValueChar :: Word8 -> Bool
-isValueChar c = isAlphabetic c || isDigit c || isPeriod c || isMinus c || isPlus c
-
-isOpen :: Word8 -> Bool
-isOpen c = c == openBracket || c == openBrace
-
-isClose :: Word8 -> Bool
-isClose c = c == closeBracket || c == closeBrace
-
-isDelim :: Word8 -> Bool
-isDelim c = c == comma || c == colon
-
-isDoubleQuote :: Word8 -> Bool
-isDoubleQuote c = c == doubleQuote
-
-isBackSlash :: Word8 -> Bool
-isBackSlash c = c == backSlash
diff --git a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/SemiIndex.hs b/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/SemiIndex.hs
deleted file mode 100644
--- a/hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/SemiIndex.hs
+++ /dev/null
@@ -1,80 +0,0 @@
-{-# LANGUAGE DeriveFunctor     #-}
-{-# LANGUAGE DeriveTraversable #-}
-{-# LANGUAGE InstanceSigs      #-}
-{-# LANGUAGE MultiWayIf        #-}
-
-module HaskellWorks.Data.Json.Simple.Cursor.SemiIndex
-  ( buildSemiIndex
-  , SemiIndex(..)
-  ) where
-
-import Control.Monad.ST
-import Data.Word
-
-import qualified Data.ByteString                                     as BS
-import qualified Data.ByteString.Unsafe                              as BSU
-import qualified Data.Vector.Storable                                as DVS
-import qualified HaskellWorks.Data.Bits.Writer.Storable              as W
-import qualified HaskellWorks.Data.Json.Simple.Cursor.Internal.Word8 as W8
-
-{-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}
-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
-
-data Context = InJson | InString | InEscape deriving (Eq, Show)
-
-data SemiIndex v = SemiIndex
-  { semiIndexContext :: !Context
-  , semiIndexIb      :: !v
-  , semiIndexBp      :: !v
-  } deriving (Functor, Traversable, Foldable)
-
-buildSemiIndex :: BS.ByteString -> SemiIndex (DVS.Vector Word64)
-buildSemiIndex bs = DVS.createT $ do
-  let len = (BS.length bs + 7) `div` 8
-  mib <- W.newWriter len
-  mbp <- W.newWriter (len * 2)
-  buildFromByteString mib mbp bs 0 InJson
-{-# INLINE buildSemiIndex #-}
-
-buildFromByteString :: W.Writer s -> W.Writer s -> BS.ByteString -> Int -> Context -> ST s (SemiIndex (DVS.MVector s Word64))
-buildFromByteString ib bp bs i context = if i < BS.length bs
-  then do
-    let c = BSU.unsafeIndex bs i
-    case context of
-      InJson -> if
-        | c == W8.openBracket || c == W8.openBrace -> do
-          W.unsafeWriteBit bp 1
-          W.unsafeWriteBit bp 1
-          W.unsafeWriteBit ib 1
-          buildFromByteString ib bp bs (i + 1) InJson
-        | c == W8.closeBracket || c == W8.closeBrace -> do
-          W.unsafeWriteBit bp 0
-          W.unsafeWriteBit bp 0
-          W.unsafeWriteBit ib 1
-          buildFromByteString ib bp bs (i + 1) InJson
-        | c == W8.comma || c == W8.colon -> do
-          W.unsafeWriteBit bp 0
-          W.unsafeWriteBit bp 1
-          W.unsafeWriteBit ib 1
-          buildFromByteString ib bp bs (i + 1) InJson
-        | c == W8.doubleQuote -> do
-          W.unsafeWriteBit ib 0
-          buildFromByteString ib bp bs (i + 1) InString
-        | otherwise -> do
-          W.unsafeWriteBit ib 0
-          buildFromByteString ib bp bs (i + 1) InJson
-      InString -> do
-        W.unsafeWriteBit ib 0
-        let newContext = if
-              | c == W8.doubleQuote  -> InJson
-              | c == W8.backSlash    -> InEscape
-              | otherwise           -> InString
-        buildFromByteString ib bp bs (i + 1) newContext
-      InEscape -> do
-        W.unsafeWriteBit ib 0
-        buildFromByteString ib bp bs (i + 1) InString
-  else do
-    ibv <- W.written ib
-    bpv <- W.written bp
-    return (SemiIndex context ibv bpv)
-{-# INLINE buildFromByteString #-}
diff --git a/hw-json.cabal b/hw-json.cabal
--- a/hw-json.cabal
+++ b/hw-json.cabal
@@ -1,7 +1,7 @@
 cabal-version:  2.2
 
 name:           hw-json
-version:        1.2.0.0
+version:        1.2.0.1
 synopsis:       Memory efficient JSON parser
 description:    Memory efficient JSON parser. Please see README.md
 category:       Data
@@ -54,7 +54,8 @@
 common hw-bits                  { build-depends: hw-bits                  >= 0.7.0.5    && < 0.8    }
 common hw-hspec-hedgehog        { build-depends: hw-hspec-hedgehog        >= 0.1.0.4    && < 0.2    }
 common hw-json-simd             { build-depends: hw-json-simd             >= 0.1.0.2    && < 0.2    }
-common hw-json-standard-cursor  { build-depends: hw-json-standard-cursor  >= 0.1.0.0    && < 0.2    }
+common hw-json-simple-cursor    { build-depends: hw-json-simple-cursor    >= 0.1.0.1    && < 0.2    }
+common hw-json-standard-cursor  { build-depends: hw-json-standard-cursor  >= 0.1.0.1    && < 0.2    }
 common hw-mquery                { build-depends: hw-mquery                >= 0.2.0.0    && < 0.3    }
 common hw-parser                { build-depends: hw-parser                >= 0.1        && < 0.2    }
 common hw-prim                  { build-depends: hw-prim                  >= 0.6.2.28   && < 0.7    }
@@ -80,24 +81,6 @@
     ghc-options: -mbmi2 -msse4.2
     cpp-options: -DBMI2_ENABLED
 
-library hw-json-simple-cursor
-  import:   base, config
-          , bytestring
-          , hw-balancedparens
-          , hw-bits
-          , hw-prim
-          , hw-rankselect
-          , hw-rankselect-base
-          , vector
-          , word8
-  hs-source-dirs:       hw-json-simple-cursor
-  exposed-modules:      HaskellWorks.Data.Json.Simple.Cursor
-                        HaskellWorks.Data.Json.Simple.Cursor.Fast
-                        HaskellWorks.Data.Json.Simple.Cursor.SemiIndex
-                        HaskellWorks.Data.Json.Simple.Cursor.Internal.IbBp
-                        HaskellWorks.Data.Json.Simple.Cursor.Internal.ToIbBp
-                        HaskellWorks.Data.Json.Simple.Cursor.Internal.Word8
-
 library
   import:   base, config
           , ansi-wl-pprint
@@ -107,6 +90,7 @@
           , dlist
           , hw-balancedparens
           , hw-bits
+          , hw-json-simple-cursor
           , hw-json-standard-cursor
           , hw-mquery
           , hw-parser
@@ -122,7 +106,6 @@
   hs-source-dirs:       src
   other-modules:        Paths_hw_json
   autogen-modules:      Paths_hw_json
-  build-depends:        hw-json-simple-cursor
   exposed-modules:
       HaskellWorks.Data.Json.DecodeError
       HaskellWorks.Data.Json.FromValue
@@ -144,12 +127,6 @@
       HaskellWorks.Data.Json.Simple.Value
       HaskellWorks.Data.Json.Standard.Load.Partial
       HaskellWorks.Data.Json.Value
-  reexported-modules:
-      HaskellWorks.Data.Json.Simple.Cursor
-    , HaskellWorks.Data.Json.Simple.Cursor.Fast
-    , HaskellWorks.Data.Json.Simple.Cursor.SemiIndex
-    , HaskellWorks.Data.Json.Simple.Cursor.Internal.IbBp
-    , HaskellWorks.Data.Json.Simple.Cursor.Internal.ToIbBp
 
 executable hw-json
   import:   base, config
@@ -158,6 +135,7 @@
           , generic-lens
           , hw-balancedparens
           , hw-json-simd
+          , hw-json-simple-cursor
           , hw-json-standard-cursor
           , hw-mquery
           , hw-prim
@@ -189,6 +167,7 @@
           , hw-balancedparens
           , hw-bits
           , hw-hspec-hedgehog
+          , hw-json-simple-cursor
           , hw-json-standard-cursor
           , hw-prim
           , hw-rankselect
