diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,8 +1,13 @@
 # Changelog for Hedis
 
+## 0.9.8
+
+* Fix syntax errors from redis when using scanOpts to specify match
+  pattern or count options (see PR #88)
+
 ## 0.9.7
 
-Expose returnDecode method of RedisCtx (see issue #83)
+* Expose returnDecode method of RedisCtx (see issue #83)
 
 ## 0.9.2
 
diff --git a/hedis.cabal b/hedis.cabal
--- a/hedis.cabal
+++ b/hedis.cabal
@@ -1,5 +1,5 @@
 name:               hedis
-version:            0.9.7
+version:            0.9.8
 synopsis:
     Client library for the Redis datastore: supports full command set,
     pipelining.
diff --git a/src/Database/Redis/ManualCommands.hs b/src/Database/Redis/ManualCommands.hs
--- a/src/Database/Redis/ManualCommands.hs
+++ b/src/Database/Redis/ManualCommands.hs
@@ -699,9 +699,9 @@
 addScanOpts cmd ScanOpts{..} =
     concat [cmd, match, count]
   where
-    match = maybeToList scanMatch
-    count = map encode $ maybeToList scanCount
-
+    prepend x y = [x, y]
+    match       = maybe [] (prepend "MATCH") scanMatch
+    count       = maybe [] ((prepend "COUNT").encode) scanCount
 
 sscan
     :: (RedisCtx m f)
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -532,12 +532,16 @@
 testScans = testCase "scans" $ do
     set "key" "value"       >>=? Ok
     scan cursor0            >>=? (cursor0, ["key"])
+    scanOpts cursor0 sOpts1 >>=? (cursor0, ["key"])
+    scanOpts cursor0 sOpts2 >>=? (cursor0, [])
     sadd "set" ["1"]        >>=? 1
     sscan "set" cursor0     >>=? (cursor0, ["1"])
     hset "hash" "k" "v"     >>=? True
     hscan "hash" cursor0    >>=? (cursor0, [("k", "v")])
     zadd "zset" [(42, "2")] >>=? 1
     zscan "zset" cursor0    >>=? (cursor0, [("2", 42)])
+    where sOpts1 = defaultScanOpts { scanMatch = Just "k*" }
+          sOpts2 = defaultScanOpts { scanMatch = Just "not*"}
 
 testZrangelex ::Test
 testZrangelex = testCase "zrangebylex" $ do
