diff --git a/Text/Trifecta/Parser/Prim.hs b/Text/Trifecta/Parser/Prim.hs
--- a/Text/Trifecta/Parser/Prim.hs
+++ b/Text/Trifecta/Parser/Prim.hs
@@ -176,8 +176,11 @@
 
 instance MonadParser (Parser e) where
   -- commit (Parser m) = Parser $ \ _ _ co ce -> m co ce co ce
-  try (Parser m) = Parser $ \ eo ee co ce -> m eo ee co $ 
-    \e -> if fatalErr (errMessage e) then ce e else ee e
+  try (Parser m) = Parser $ \ eo ee co ce l b8 d bs -> m eo ee co (\e l' _ _ _ -> 
+     if fatalErr (errMessage e) 
+     then ce e (l <> l') b8 d bs 
+     else ee e (l <> l') b8 d bs
+     ) l b8 d bs
   {-# INLINE try #-}
   highlight t (Parser m) = Parser $ \eo ee co ce l b8 d bs -> 
     m eo ee (\a e l' b8' d' -> co a e l' { errHighlights = IntervalMap.insert d d' t (errHighlights l') } b8' d') ce l b8 d bs
diff --git a/Text/Trifecta/Parser/Token/Identifier.hs b/Text/Trifecta/Parser/Token/Identifier.hs
--- a/Text/Trifecta/Parser/Token/Identifier.hs
+++ b/Text/Trifecta/Parser/Token/Identifier.hs
@@ -53,10 +53,6 @@
 -- | parse an non-reserved identifier or symbol
 ident :: MonadTokenParser m => IdentifierStyle m -> m ByteString
 ident s = lexeme $ try $ do
-  m <- mark
-  name <- try (highlight (styleHighlight s) (sliced (styleStart s *> skipMany (styleLetter s)))) <?> styleName s
-  when (member name (styleReserved s)) $ do
-    release m
-    unexpected $ "reserved " ++ styleName s ++ " " ++ show name
+  name <- highlight (styleHighlight s) (sliced (styleStart s *> skipMany (styleLetter s))) <?> styleName s
+  when (member name (styleReserved s)) $ unexpected $ "reserved " ++ styleName s ++ " " ++ show name
   return name
-
diff --git a/trifecta.cabal b/trifecta.cabal
--- a/trifecta.cabal
+++ b/trifecta.cabal
@@ -1,6 +1,6 @@
 name:          trifecta
 category:      Text, Parsing, Diagnostics, Pretty Printer, Logging
-version:       0.38
+version:       0.39
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
