diff --git a/Network/Wai/Middleware/MethodOverride.hs b/Network/Wai/Middleware/MethodOverride.hs
new file mode 100644
--- /dev/null
+++ b/Network/Wai/Middleware/MethodOverride.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Network.Wai.Middleware.MethodOverride
+    ( methodOverride
+    ) where
+
+import Network.Wai
+import Network.Wai.Parse (parseQueryString)
+
+methodOverride :: Middleware
+methodOverride app req =
+    app req'
+  where
+    req' =
+        case lookup "_method" $ parseQueryString $ queryString req of
+            Nothing -> req
+            Just m -> req { requestMethod = m }
diff --git a/wai-extra.cabal b/wai-extra.cabal
--- a/wai-extra.cabal
+++ b/wai-extra.cabal
@@ -1,5 +1,5 @@
 Name:                wai-extra
-Version:             0.3.0
+Version:             0.3.1
 Synopsis:            Provides some basic WAI handlers and middleware.
 Description:         The goal here is to provide common features without many dependencies.
 License:             BSD3
@@ -31,6 +31,7 @@
                      Network.Wai.Middleware.Debug
                      Network.Wai.Middleware.Gzip
                      Network.Wai.Middleware.Jsonp
+                     Network.Wai.Middleware.MethodOverride
                      Network.Wai.Middleware.Vhost
                      Network.Wai.Zlib
                      Network.Wai.Parse
