diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Revision history for gigaparsec
 
+## 0.2.2.3 -- 2024-01-29
+* Fixed bug where `markAsToken` doesn't apply at the correct offsets
+
 ## 0.2.2.2 -- 2024-01-29
 * Optimised the error system using `DefuncError` and `DefuncHints`.
 * Fixed bugs with amending and token merging.
diff --git a/gigaparsec.cabal b/gigaparsec.cabal
--- a/gigaparsec.cabal
+++ b/gigaparsec.cabal
@@ -20,7 +20,7 @@
 -- PVP summary:     +-+------- breaking API changes
 --                  | | +----- non-breaking API additions
 --                  | | | +--- code changes with no API change
-version:            0.2.2.2
+version:            0.2.2.3
 
 -- A short (one-line) description of the package.
 synopsis:
diff --git a/src/Text/Gigaparsec/Internal/Errors/DefuncError.hs b/src/Text/Gigaparsec/Internal/Errors/DefuncError.hs
--- a/src/Text/Gigaparsec/Internal/Errors/DefuncError.hs
+++ b/src/Text/Gigaparsec/Internal/Errors/DefuncError.hs
@@ -142,7 +142,7 @@
   where !eBy = entrenchedBy err
 
 markAsLexical :: Word -> DefuncError -> DefuncError
-markAsLexical !off (DefuncError IsVanilla flags pOff uOff errTy) | off == pOff =
+markAsLexical !off (DefuncError IsVanilla flags pOff uOff errTy) | off < pOff =
   DefuncError IsVanilla (setBit flags lexicalBit) pOff uOff errTy
 markAsLexical _ err = err
 
