diff --git a/happstack-server.cabal b/happstack-server.cabal
--- a/happstack-server.cabal
+++ b/happstack-server.cabal
@@ -1,5 +1,5 @@
 Name:                happstack-server
-Version:             7.5.2
+Version:             7.5.3
 Synopsis:            Web related tools and services.
 Description:         Happstack Server provides an HTTP server and a rich set of functions for routing requests, handling query parameters, generating responses, working with cookies, serving files, and more. For in-depth documentation see the Happstack Crash Course <http://happstack.com/docs/crashcourse/index.html>
 License:             BSD3
@@ -47,6 +47,7 @@
                        Happstack.Server.Internal.LogFormat
                        Happstack.Server.Internal.MessageWrap
                        Happstack.Server.Internal.Multipart
+                       Happstack.Server.Internal.RFC822Headers
                        Happstack.Server.Internal.Socket
                        Happstack.Server.Internal.TimeoutIO
                        Happstack.Server.Internal.TimeoutManager
@@ -64,7 +65,6 @@
   Other-modules:
                        Happstack.Server.Internal.Clock
                        Happstack.Server.Internal.LazyLiner
-                       Happstack.Server.Internal.RFC822Headers
                        Happstack.Server.Internal.SocketTH
                        Happstack.Server.SURI.ParseURI
                        Paths_happstack_server
diff --git a/src/Happstack/Server/Internal/RFC822Headers.hs b/src/Happstack/Server/Internal/RFC822Headers.hs
--- a/src/Happstack/Server/Internal/RFC822Headers.hs
+++ b/src/Happstack/Server/Internal/RFC822Headers.hs
@@ -94,7 +94,11 @@
      -- where nothing is escaped in the filename parameter
      -- of the content-disposition header in multipart/form-data
      let litStr = if p_name == "filename"
-                   then buggyLiteralString
+                   then choice [ try ((lookAhead $ do
+                                        void (literalString >>
+                                              p_parameter))
+                                     >> literalString)
+                               , buggyLiteralString]
                    else literalString
      p_value <- litStr <|> p_token
      return (map toLower p_name, p_value)
diff --git a/tests/Happstack/Server/Tests.hs b/tests/Happstack/Server/Tests.hs
--- a/tests/Happstack/Server/Tests.hs
+++ b/tests/Happstack/Server/Tests.hs
@@ -19,6 +19,7 @@
 import Happstack.Server.Internal.Cookie
 import Happstack.Server.Internal.Multipart
 import Happstack.Server.Internal.MessageWrap
+import Happstack.Server.Internal.RFC822Headers (ContentDisposition(..), parseContentDisposition)
 import Happstack.Server.SURI(ToSURI(..), path, query)
 import Test.HUnit as HU (Test(..), (~:), (@?=), (@=?), assertEqual)
 import Text.ParserCombinators.Parsec
@@ -32,6 +33,7 @@
                                 , compressFilterResponseTest
                                 , matchMethodTest
                                 , cookieHeaderOrderTest
+                                , pContentDispositionFilename
                                 ]
 
 cookieParserTest :: Test
@@ -236,3 +238,12 @@
   where
     gethead = [GET, HEAD]
     others  = [POST, PUT, DELETE, TRACE, OPTIONS, CONNECT]
+
+
+-- | https://github.com/Happstack/happstack-server/pull/56
+pContentDispositionFilename :: Test
+pContentDispositionFilename =
+  "pContentDispositionFilename" ~:
+    do let doesNotWorkWithOldParserButWithNew = "form-data; filename=\"file.pdf\"; name=\"file\"" :: String
+       c <- parseContentDisposition doesNotWorkWithOldParserButWithNew
+       assertEqual "parseContentDisposition" c (ContentDisposition "form-data" [("filename","file.pdf"),("name","file")])
