diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Changelog
 
+#### 0.32.0.1
+* Fix bug in Chrome when serving files with commas in name.
+
 ## 0.32
 
 * Add `addHeader` dictionary combinator, to extend instead of replace
diff --git a/rest-core.cabal b/rest-core.cabal
--- a/rest-core.cabal
+++ b/rest-core.cabal
@@ -1,5 +1,5 @@
 name:                rest-core
-version:             0.32
+version:             0.32.0.1
 description:         Rest API library.
 synopsis:            Rest API library.
 maintainer:          code@silk.co
@@ -47,7 +47,7 @@
     , fclabels == 2.0.*
     , hxt >= 9.2 && < 9.4
     , hxt-pickle-utils == 0.1.*
-    , json-schema == 0.6.*
+    , json-schema >= 0.6 && < 0.8
     , mtl >= 2.0 && < 2.3
     , multipart >= 0.1.1 && < 0.2
     , random == 1.0.*
@@ -55,7 +55,7 @@
     , rest-types == 1.10.*
     , safe >= 0.2 && < 0.4
     , split >= 0.1 && < 0.3
-    , text >= 0.11 && < 1.2
+    , text >= 0.11 && < 1.3
     , transformers >= 0.2 && < 0.5
     , unordered-containers == 0.2.*
     , uri-encode == 1.5.*
diff --git a/src/Rest/Driver/Perform.hs b/src/Rest/Driver/Perform.hs
--- a/src/Rest/Driver/Perform.hs
+++ b/src/Rest/Driver/Perform.hs
@@ -331,15 +331,18 @@
         tryD (JsonO      : _ ) JsonFormat   = contentType JsonFormat   >> ok (encode v)
         tryD (StringO    : _ ) StringFormat = contentType StringFormat >> ok (UTF8.fromString v)
         tryD (MultipartO : _ ) _            = outputMultipart v
-        tryD (FileO      : _ ) FileFormat   = do let ext = (reverse . takeWhile (/='.') . reverse) $ snd v
-                                                 mime <- fromMaybe "application/octet-stream" <$> lookupMimeType (map toLower ext)
-                                                 setHeader "Content-Type" mime
-                                                 setHeader "Cache-Control" "max-age=604800"
-                                                 setHeader "Content-Disposition" ("filename=" ++ snd v)
-                                                 ok (fst v)
+        tryD (FileO      : _ ) FileFormat   =
+          do let ext = (reverse . takeWhile (/='.') . reverse) $ snd v
+             mime <- fromMaybe "application/octet-stream" <$> lookupMimeType (map toLower ext)
+             setHeader "Content-Type" mime
+             setHeader "Cache-Control" "max-age=604800"
+             setHeader "Content-Disposition" ("filename=\"" ++ escapeQuotes (snd v) ++ "\"")
+             ok (fst v)
         tryD []                t            = throwError (UnsupportedFormat (show t))
         tryD (_          : xs) t            = tryD xs t
     ok r = setResponseCode 200 >> return r
+    escapeQuotes :: String -> String
+    escapeQuotes = intercalate "\\\"" . splitOn "\""
 
 outputMultipart :: Rest m => [BodyPart] -> m UTF8.ByteString
 outputMultipart vs =
@@ -373,7 +376,8 @@
         [ ["image"]       , xs    ] -> xs >>= img
         _                           -> []
 
-    trim = reverse . dropWhile isSpace . reverse . dropWhile isSpace
+    trim = f . f
+      where f = reverse . dropWhile isSpace
 
     txt "*"     = [XmlFormat, JsonFormat, StringFormat]
     txt "json"  = [JsonFormat]
