diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,9 @@
+## 1.0.2
+
+* Updated for `ServerAPI` in `engine-io-1.2`.
+
+* ParseError is now caught correctly, and no longer results in a response 500 to the client.
+
 ## 1.0.1
 
 * Updated for the new `ServerAPI` in `engine-io-1.1`.
diff --git a/engine-io-snap.cabal b/engine-io-snap.cabal
--- a/engine-io-snap.cabal
+++ b/engine-io-snap.cabal
@@ -1,5 +1,6 @@
 name: engine-io-snap
-version: 1.0.1
+version: 1.0.2
+homepage: http://github.com/ocharles/engine.io
 license: BSD3
 license-file: LICENSE
 author: Oliver Charles
@@ -20,11 +21,12 @@
     base >=4.6 && <4.8,
     bytestring >= 0.9 && <0.11,
     containers >=0.5 && <0.6,
-    engine-io >= 1.1 && <1.2,
+    engine-io >= 1.2 && <1.3,
+    MonadCatchIO-transformers >= 0.2.1 && < 0.4,
     snap-core >= 0.9 && <0.10,
     unordered-containers >= 0.2 && <0.3,
-    websockets >=0.8 && <0.9,
-    websockets-snap >= 0.8 && <0.9
+    websockets >=0.8 && <0.10,
+    websockets-snap >= 0.9 && <0.10
 
   hs-source-dirs: src
   default-language: Haskell2010
diff --git a/src/Network/EngineIO/Snap.hs b/src/Network/EngineIO/Snap.hs
--- a/src/Network/EngineIO/Snap.hs
+++ b/src/Network/EngineIO/Snap.hs
@@ -3,6 +3,7 @@
 
 import Control.Applicative
 
+import qualified Control.Monad.CatchIO as MonadCatchIO
 import qualified Data.Attoparsec.Enumerator as Attoparsec
 import qualified Data.ByteString.Builder as Builder
 import qualified Data.HashMap.Strict as HashMap
@@ -25,7 +26,10 @@
       LMap.foldlWithKey' (\m k v -> HashMap.insert k v m) HashMap.empty
         <$> Snap.getQueryParams
 
-  , EIO.srvParseRequestBody = Snap.runRequestBody . Attoparsec.iterParser
+  , EIO.srvParseRequestBody =
+      fmap (either (\e@Attoparsec.ParseError{} -> Left (show e))
+                   Right) .
+      MonadCatchIO.try . Snap.runRequestBody . Attoparsec.iterParser
 
   , EIO.srvGetRequestMethod = do
       m <- Snap.getsRequest Snap.rqMethod
