diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,11 @@
 
 ## [Unreleased]
 
+## [1.2.0] - 2024-03-18
+
+### Changed
+- Support for embedding WAI applications in handlers (#36)
+
 ## [1.1.1] - 2024-01-01
 
 ### Changed
@@ -12,6 +17,7 @@
 ### Added
 - First version of webgear-swagger-ui
 
-[Unreleased]: https://github.com/haskell-webgear/webgear/compare/v1.1.1...HEAD
+[Unreleased]: https://github.com/haskell-webgear/webgear/compare/v1.2.0...HEAD
+[1.2.0]: https://github.com/haskell-webgear/webgear/releases/tag/v1.2.0
 [1.1.1]: https://github.com/haskell-webgear/webgear/releases/tag/v1.1.1
 [1.1.0]: https://github.com/haskell-webgear/webgear/releases/tag/v1.1.0
diff --git a/src/WebGear/Swagger/UI.hs b/src/WebGear/Swagger/UI.hs
--- a/src/WebGear/Swagger/UI.hs
+++ b/src/WebGear/Swagger/UI.hs
@@ -5,36 +5,27 @@
   swaggerUI,
 ) where
 
-import Control.Arrow (returnA, (<+>))
+import Control.Arrow ((<+>))
 import Data.ByteString (ByteString)
-import Data.ByteString.Builder (byteString)
-import Data.Text (Text, unpack)
+import Data.Text (Text)
 import qualified Network.HTTP.Types as HTTP
-import qualified Network.Mime as Mime
+import Network.Wai.Application.Static (embeddedSettings)
 import WebGear.Core (
   Body,
   HTML (..),
-  Handler (consumeRoute),
   JSON (..),
-  PlainText (..),
   RequestHandler,
   RequiredResponseHeader,
   Response (..),
-  ResponseBody (ResponseBodyBuilder),
-  RoutePath (..),
   Sets,
   StdHandler,
   UnknownContentBody,
   match,
   method,
-  ok200,
   pathEnd,
   respondA,
   route,
-  setBodyWithoutContentType,
-  setHeader,
-  unwitnessA,
-  (>->),
+  serveStatic,
  )
 import qualified WebGear.Swagger.UI.Embedded as Embedded
 
@@ -50,7 +41,6 @@
   , Sets
       h
       [ RequiredResponseHeader "Content-Type" Text
-      , RequiredResponseHeader "Content-Type" Mime.MimeType
       , Body HTML ByteString
       , Body JSON apiSpec
       , UnknownContentBody
@@ -96,35 +86,10 @@
   apiSpec ->
   RequestHandler h ts
 swaggerJson apiSpec =
-  [route| HTTP.GET /swagger.json |]
-    $ proc _request -> respondA HTTP.ok200 JSON -< apiSpec
+  [route| HTTP.GET /swagger.json |] $
+    proc _request -> respondA HTTP.ok200 JSON -< apiSpec
 
-uiAssets ::
-  ( StdHandler h m
-  , Sets
-      h
-      [ RequiredResponseHeader "Content-Type" Text
-      , RequiredResponseHeader "Content-Type" Mime.MimeType
-      , UnknownContentBody
-      ]
-      Response
-  ) =>
-  RequestHandler h ts
+uiAssets :: (StdHandler h m) => RequestHandler h ts
 uiAssets =
-  [match| HTTP.GET / |]
-    $ proc _request -> do
-      RoutePath path <- consumeRoute returnA -< ()
-      case path of
-        [filename] ->
-          case lookup (unpack filename) Embedded.uiAssetsDir of
-            Nothing -> notFound -< ()
-            Just content -> do
-              let contentType = Mime.defaultMimeLookup filename
-              (ok200 -< ())
-                >-> (\resp -> setBodyWithoutContentType -< (resp, ResponseBodyBuilder $ byteString content))
-                >-> (\resp -> setHeader @"Content-Type" -< (resp, contentType))
-                >-> (\resp -> unwitnessA -< resp)
-        _ -> notFound -< ()
-  where
-    notFound = proc () -> do
-      respondA HTTP.notFound404 PlainText -< "" :: Text
+  [match| HTTP.GET / |] $
+    serveStatic (embeddedSettings Embedded.uiAssetsDir)
diff --git a/src/WebGear/Swagger/UI/Embedded.hs b/src/WebGear/Swagger/UI/Embedded.hs
--- a/src/WebGear/Swagger/UI/Embedded.hs
+++ b/src/WebGear/Swagger/UI/Embedded.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE TemplateHaskell #-}
 
+-- | Embed a swagger-ui distribution in Haskell.
 module WebGear.Swagger.UI.Embedded (
   indexHtmlFile,
   uiAssetsDir,
@@ -8,8 +9,10 @@
 import Data.ByteString (ByteString)
 import qualified Data.FileEmbed as FileEmbed
 
+-- | Contents of index.html from a swagger-ui distribution
 indexHtmlFile :: ByteString
 indexHtmlFile = $(FileEmbed.embedFile "index.html")
 
+-- | UI assets from a swagger-ui distribution indexed by their filename
 uiAssetsDir :: [(FilePath, ByteString)]
 uiAssetsDir = $(FileEmbed.embedDir "swagger-ui-5.10.5/dist")
diff --git a/webgear-swagger-ui.cabal b/webgear-swagger-ui.cabal
--- a/webgear-swagger-ui.cabal
+++ b/webgear-swagger-ui.cabal
@@ -1,7 +1,7 @@
 cabal-version:       2.4
 
 name:                webgear-swagger-ui
-version:             1.1.1
+version:             1.2.0
 synopsis:            Host swagger UI based on WebGear API specifications.
 description:
     WebGear is a library to for building composable, type-safe HTTP API servers.
@@ -49,13 +49,13 @@
                     , WebGear.Swagger.UI.Embedded
   hs-source-dirs:     src
   default-language:   Haskell2010
-  build-depends:      base >=4.13.0.0 && <4.19
+  build-depends:      base >=4.13.0.0 && <4.20
                     , bytestring >=0.10.10.1 && <0.13
                     , file-embed ==0.0.*
                     , http-types ==0.12.*
-                    , mime-types ==0.1.*
                     , text >=1.2.0.0 && <2.2
-                    , webgear-core ^>=1.1.1
+                    , wai-app-static ==3.1.*
+                    , webgear-core ^>=1.2.0
   default-extensions: Arrows
                       DataKinds
                       FlexibleContexts
