diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 ## [Unreleased]
 
+## [1.5.0] - 2025-07-23
+
+### Changed
+- Make FormData backend monadic (breaking change) (#59)
+
 ## [1.4.0] - 2025-05-19
 
 ### Added
@@ -100,7 +105,8 @@
 - Automated tests
 - Documentation
 
-[Unreleased]: https://github.com/haskell-webgear/webgear/compare/v1.4.0...HEAD
+[Unreleased]: https://github.com/haskell-webgear/webgear/compare/v1.5.0...HEAD
+[1.5.0]: https://github.com/haskell-webgear/webgear/releases/tag/v1.5.0
 [1.4.0]: https://github.com/haskell-webgear/webgear/releases/tag/v1.4.0
 [1.3.1]: https://github.com/haskell-webgear/webgear/releases/tag/v1.3.1
 [1.3.0]: https://github.com/haskell-webgear/webgear/releases/tag/v1.3.0
diff --git a/src/WebGear/Server/MIMETypes.hs b/src/WebGear/Server/MIMETypes.hs
--- a/src/WebGear/Server/MIMETypes.hs
+++ b/src/WebGear/Server/MIMETypes.hs
@@ -46,19 +46,21 @@
 as specified by a MIME type.
 -}
 class (MIMEType mt) => BodyUnrender m mt a where
-  -- | Parse a request body. Return a 'Left' value with error messages
-  -- in case of failure.
+  {- | Parse a request body. Return a 'Left' value with error messages
+  in case of failure.
+  -}
   bodyUnrender :: mt -> Request -> m (Either Text a)
 
 {- | Instances of this class serializes a value to a response body as
 specified by a MIME type.
 -}
 class (MIMEType mt) => BodyRender m mt a where
-  -- | Render a value in the format specified by the media type.
-  --
-  -- Returns the response body and the media type to be used in the
-  -- "Content-Type" header. This could be a variant of the original
-  -- media type with additional parameters.
+  {- | Render a value in the format specified by the media type.
+
+  Returns the response body and the media type to be used in the
+  "Content-Type" header. This could be a variant of the original
+  media type with additional parameters.
+  -}
   bodyRender :: mt -> Response -> a -> m (HTTP.MediaType, ResponseBody)
 
 --------------------------------------------------------------------------------
@@ -127,11 +129,12 @@
   st <- liftResourceT getInternalState
   pure $ tempFileBackEnd st
 
-instance (MonadIO m) => BodyUnrender m (FormData a) (FormDataResult a) where
-  bodyUnrender :: FormData a -> Request -> m (Either Text (FormDataResult a))
+instance (MonadIO m) => BodyUnrender m (FormData m a) (FormDataResult a) where
+  bodyUnrender :: FormData m a -> Request -> m (Either Text (FormDataResult a))
   bodyUnrender FormData{parseOptions, backendOptions} request = do
-    (formDataParams, formDataFiles) <-
-      liftIO $ parseRequestBodyEx parseOptions backendOptions $ toWaiRequest request
+    (formDataParams, formDataFiles) <- do
+      be <- backendOptions
+      liftIO $ parseRequestBodyEx parseOptions be $ toWaiRequest request
     pure $ Right FormDataResult{formDataParams, formDataFiles}
 
 --------------------------------------------------------------------------------
diff --git a/webgear-server.cabal b/webgear-server.cabal
--- a/webgear-server.cabal
+++ b/webgear-server.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.4
 name:                webgear-server
-version:             1.4.0
+version:             1.5.0
 synopsis:            Composable, type-safe library to build HTTP API servers
 description:
     WebGear is a library to for building composable, type-safe HTTP API servers.
@@ -59,7 +59,7 @@
                     , http-types ==0.12.*
                     , text >=2.0 && <2.2
                     , wai ==3.2.*
-                    , webgear-core ^>=1.4.0
+                    , webgear-core ^>=1.5.0
   ghc-options:        -Wall
                       -Wcompat
                       -Widentities
