diff --git a/hw-json-standard-cursor.cabal b/hw-json-standard-cursor.cabal
--- a/hw-json-standard-cursor.cabal
+++ b/hw-json-standard-cursor.cabal
@@ -1,7 +1,7 @@
 cabal-version:  2.2
 
 name:           hw-json-standard-cursor
-version:        0.2.0.0
+version:        0.2.1.0
 synopsis:       Memory efficient JSON parser
 description:    Memory efficient JSON parser. Please see README.md
 category:       Data
@@ -51,7 +51,7 @@
 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-prim              { build-depends: hw-prim              >= 0.6.2.28   && < 0.7    }
+common hw-prim              { build-depends: hw-prim              >= 0.6.2.29   && < 0.7    }
 common hw-rankselect        { build-depends: hw-rankselect        >= 0.13       && < 0.14   }
 common hw-rankselect-base   { build-depends: hw-rankselect-base   >= 0.3.2.1    && < 0.4    }
 common lens                 { build-depends: lens                 >= 4          && < 5      }
@@ -79,6 +79,7 @@
           , bytestring
           , hw-balancedparens
           , hw-bits
+          , hw-json-simd
           , hw-prim
           , hw-rankselect
           , hw-rankselect-base
diff --git a/src/HaskellWorks/Data/Json/Standard/Cursor/Fast.hs b/src/HaskellWorks/Data/Json/Standard/Cursor/Fast.hs
--- a/src/HaskellWorks/Data/Json/Standard/Cursor/Fast.hs
+++ b/src/HaskellWorks/Data/Json/Standard/Cursor/Fast.hs
@@ -5,10 +5,13 @@
   , fromByteString
   , fromForeignRegion
   , fromString
+  , fromBsIbBp
+  , simdToIbBp
   ) where
 
 import Foreign.ForeignPtr
 import HaskellWorks.Data.Json.Standard.Cursor.Generic
+import HaskellWorks.Data.Json.Standard.Cursor.Internal.IbBp
 import HaskellWorks.Data.Json.Standard.Cursor.Specific
 import HaskellWorks.Data.RankSelect.CsPoppy1
 
@@ -26,14 +29,17 @@
 
 type Cursor = GenericCursor BS.ByteString CsPoppy1 (RM.RangeMin CsPoppy1)
 
-fromByteString :: BS.ByteString -> Cursor
-fromByteString bs = GenericCursor
+fromBsIbBp :: BS.ByteString -> IbBp -> Cursor
+fromBsIbBp bs ibBp = GenericCursor
   { cursorText      = bs
-  , interests       = makeCsPoppy ib
-  , balancedParens  = RM.mkRangeMin (makeCsPoppy bp)
+  , interests       = makeCsPoppy ibPart
+  , balancedParens  = RM.mkRangeMin (makeCsPoppy bpPart)
   , cursorRank      = 1
   }
-  where J.IbBp ib bp = J.slowToIbBp bs
+  where J.IbBp ibPart bpPart = ibBp
+
+fromByteString :: BS.ByteString -> Cursor
+fromByteString bs = fromBsIbBp bs (J.slowToIbBp bs)
 
 fromForeignRegion :: F.ForeignRegion -> Cursor
 fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)
diff --git a/src/HaskellWorks/Data/Json/Standard/Cursor/Internal/IbBp.hs b/src/HaskellWorks/Data/Json/Standard/Cursor/Internal/IbBp.hs
--- a/src/HaskellWorks/Data/Json/Standard/Cursor/Internal/IbBp.hs
+++ b/src/HaskellWorks/Data/Json/Standard/Cursor/Internal/IbBp.hs
@@ -1,12 +1,25 @@
-module HaskellWorks.Data.Json.Standard.Cursor.Internal.IbBp where
+{-# LANGUAGE BangPatterns #-}
 
+module HaskellWorks.Data.Json.Standard.Cursor.Internal.IbBp
+  ( IbBp(..)
+  , slowToIbBp
+  , simdToIbBp) where
+
+import Control.Monad
+import Control.Monad.ST                    (ST)
 import Data.Word
+import HaskellWorks.Data.Vector.AsVector64
 
 import qualified Data.ByteString                                                    as BS
+import qualified Data.ByteString.Lazy                                               as LBS
 import qualified Data.Vector.Storable                                               as DVS
+import qualified Data.Vector.Storable.Mutable                                       as DVSM
+import qualified HaskellWorks.Data.ByteString.Lazy                                  as LBS
+import qualified HaskellWorks.Data.Json.Simd.Index.Standard                         as STSI
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Internal.BlankedJson        as J
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Internal.ToBalancedParens64 as J
 import qualified HaskellWorks.Data.Json.Standard.Cursor.Internal.ToInterestBits64   as J
+import qualified HaskellWorks.Data.Vector.Storable                                  as DVS
 
 data IbBp = IbBp
   { ib :: DVS.Vector Word64
@@ -19,3 +32,16 @@
   , bp = J.toBalancedParens64 blankedJson
   }
   where blankedJson = J.toBlankedJsonTyped bs
+
+simdToIbBp :: BS.ByteString -> IbBp
+simdToIbBp bs = case STSI.makeStandardJsonIbBps (LBS.rechunkPadded chunkSize (LBS.fromStrict bs)) of
+  Left msg     -> error msg
+  Right chunks -> uncurry IbBp $ DVS.construct2N maxSize (go . fst) maxSize (go . snd) chunks
+  where chunkSize = 16384
+        maxSize = (BS.length bs + chunkSize - 1) `div` 8
+        go :: BS.ByteString -> DVSM.MVector s Word64 -> ST s Int
+        go bytes mv = do
+          let source = asVector64 bytes
+          let target = DVSM.take (DVS.length source) mv
+          when (DVS.length source > 0) $ DVS.copy target source
+          return (DVS.length source)
