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.1 -- 2014-01-29
+* Fixed bug where case sensitive keywords where parsed insensitively and vice-versa
+
 ## 0.2.2.0 -- 2024-01-21
 
 * Added `manyMap` and `someMap` combinators.
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.0
+version:            0.2.2.1
 
 -- A short (one-line) description of the package.
 synopsis:
diff --git a/src/Text/Gigaparsec/Internal/Token/Symbol.hs b/src/Text/Gigaparsec/Internal/Token/Symbol.hs
--- a/src/Text/Gigaparsec/Internal/Token/Symbol.hs
+++ b/src/Text/Gigaparsec/Internal/Token/Symbol.hs
@@ -44,8 +44,8 @@
 
 _softKeyword :: Bool -> CharPredicate -> String -> Parsec ()
 _softKeyword caseSensitive letter kw
-  | caseSensitive = atomic (nfb letter caseString)
-  | otherwise     = atomic (nfb letter (string kw))
+  | not caseSensitive = atomic (nfb letter caseString)
+  | otherwise         = atomic (nfb letter (string kw))
   where nfb Nothing p = void p
         nfb (Just c) p = p *> (notFollowedBy (satisfy c) <?> ["end of " ++ kw])
         n = length kw
