diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for replace-attoparsec
 
+## 1.4.2.0 -- 2020-09-28
+
+Bugfix sepCap backtracking when sep fails
+
+See [replace-megaparsec/issues/33](https://github.com/jamesdbrock/replace-megaparsec/issues/33)
+
 ## 1.4.0.0 -- 2020-05-06
 
 __Running Parsers__: Add `splitCap` and `breakCap`.
diff --git a/replace-attoparsec.cabal b/replace-attoparsec.cabal
--- a/replace-attoparsec.cabal
+++ b/replace-attoparsec.cabal
@@ -1,5 +1,5 @@
 name:                replace-attoparsec
-version:             1.4.1.0
+version:             1.4.2.0
 cabal-version:       1.18
 synopsis:            Find, replace, and split string patterns with Attoparsec parsers (instead of regex)
 homepage:            https://github.com/jamesdbrock/replace-attoparsec
diff --git a/src/Replace/Attoparsec/ByteString.hs b/src/Replace/Attoparsec/ByteString.hs
--- a/src/Replace/Attoparsec/ByteString.hs
+++ b/src/Replace/Attoparsec/ByteString.hs
@@ -276,7 +276,7 @@
   where
     go = do
         end <- getOffset
-        r <- optional sep
+        r <- optional $ try sep
         case r of
             Nothing -> atEnd >>= \case
                 True -> empty
@@ -351,7 +351,7 @@
                 -- the Maybe then the benchmarks get dramatically worse.
                 thisiter <- (<|>)
                     ( do
-                        x <- sep
+                        x <- try $ sep
                         !offsetAfter <- getOffset
                         -- Don't allow a match of a zero-width pattern
                         when (offsetAfter <= offsetThis) empty
diff --git a/src/Replace/Attoparsec/Text.hs b/src/Replace/Attoparsec/Text.hs
--- a/src/Replace/Attoparsec/Text.hs
+++ b/src/Replace/Attoparsec/Text.hs
@@ -275,7 +275,7 @@
   where
     go = do
         end <- getOffset
-        r <- optional sep
+        r <- optional $ try sep
         case r of
             Nothing -> atEnd >>= \case
                 True -> empty
@@ -350,7 +350,7 @@
                 -- the Maybe then the benchmarks get dramatically worse.
                 thisiter <- (<|>)
                     ( do
-                        x <- sep
+                        x <- try sep
                         !offsetAfter <- getOffset
                         -- Don't allow a match of a zero-width pattern
                         when (offsetAfter <= offsetThis) empty
