diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+0.9.4
+-----
+
+* `servant-0.15` support
+
 0.9.3
 -------
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
 
 ## Example
 
-Read more about the following example [here](https://github.com/haskell-servant/servant/tree/master/servant-js/examples#examples).
+Read more about the following example [here](https://github.com/haskell-servant/servant-js/tree/master/examples).
 
 ``` haskell
 {-# LANGUAGE DataKinds #-}
diff --git a/servant-js.cabal b/servant-js.cabal
--- a/servant-js.cabal
+++ b/servant-js.cabal
@@ -1,6 +1,8 @@
 name:                servant-js
-version:             0.9.3.2
+version:             0.9.4
+
 synopsis:            Automatically derive javascript functions to query servant webservices.
+category:            Web, Servant
 description:
   Automatically derive javascript functions to query servant webservices.
   .
@@ -11,17 +13,22 @@
   webservice calls.
   .
   <https://github.com/haskell-servant/servant-js/blob/master/CHANGELOG.md CHANGELOG>
+
 license:             BSD3
 license-file:        LICENSE
 author:              Servant Contributors
 maintainer:          haskell-servant-maintainers@googlegroups.com
 copyright:           2015-2016 Servant Contributors
-category:            Web, Servant
 build-type:          Simple
 cabal-version:       >=1.10
 homepage:            http://haskell-servant.readthedocs.org/
 bug-reports:         http://github.com/haskell-servant/servant-js/issues
-tested-with:         GHC==7.8.4, GHC==7.10.3, GHC==8.0.2, GHC==8.2.2
+tested-with:
+  GHC ==8.0.2
+   || ==8.2.2
+   || ==8.4.4
+   || ==8.6.1
+
 extra-source-files:
   include/*.h
   CHANGELOG.md
@@ -42,13 +49,13 @@
                        Servant.JS.Internal
                        Servant.JS.JQuery
                        Servant.JS.Vanilla
-  build-depends:       base            >= 4.7 && <4.11
-                     , base-compat     >= 0.9
-                     , charset         >= 0.3
-                     , lens            >= 4
-                     , servant-foreign >= 0.9 && <0.12
-                     , servant         >= 0.9 && <0.14
-                     , text            >= 1.2  && < 1.3
+  build-depends:       base            >= 4.9     && <4.13
+                     , base-compat     >= 0.10.5  && <0.11
+                     , charset         >= 0.3.7.1 && <0.4
+                     , lens            >= 4.17    && <4.18
+                     , servant-foreign >= 0.15    && <0.16
+                     , servant         >= 0.15    && <0.16
+                     , text            >= 1.2.3.0 && < 1.3
 
   hs-source-dirs:      src
   default-language:    Haskell2010
@@ -66,7 +73,7 @@
     buildable: False
 
   build-depends:    base
-                  , aeson            >= 0.7  && < 1.3
+                  , aeson            >= 1.4.1.0  && < 1.5
                   , filepath         >= 1
                   , lens             >= 4
                   , servant
@@ -85,10 +92,10 @@
   other-modules:
       Servant.JSSpec
       Servant.JSSpec.CustomHeaders
-  build-tool-depends: hspec-discover:hspec-discover >=2.3.0 && <2.5
+  build-tool-depends: hspec-discover:hspec-discover >=2.6.0 && <2.7
   build-depends:     base
                    , base-compat
-                   , hspec >= 2.3.0 && <2.5
+                   , hspec >= 2.6.0 && <2.7
                    , hspec-expectations
                    , language-ecmascript >= 0.16
                    , lens
diff --git a/src/Servant/JS/Angular.hs b/src/Servant/JS/Angular.hs
--- a/src/Servant/JS/Angular.hs
+++ b/src/Servant/JS/Angular.hs
@@ -1,9 +1,11 @@
 {-#LANGUAGE OverloadedStrings #-}
 module Servant.JS.Angular where
 
+import           Prelude ()
+import           Prelude.Compat
+
 import           Control.Lens
 import           Data.Maybe (isJust)
-import           Data.Monoid
 import qualified Data.Text as T
 import           Data.Text (Text)
 import           Data.Text.Encoding (decodeUtf8)
diff --git a/src/Servant/JS/Axios.hs b/src/Servant/JS/Axios.hs
--- a/src/Servant/JS/Axios.hs
+++ b/src/Servant/JS/Axios.hs
@@ -1,9 +1,11 @@
 {-#LANGUAGE OverloadedStrings #-}
 module Servant.JS.Axios where
 
+import           Prelude ()
+import           Prelude.Compat
+
 import           Control.Lens
 import           Data.Maybe (isJust)
-import           Data.Monoid
 import           Data.Text (Text)
 import           Data.Text.Encoding (decodeUtf8)
 import qualified Data.Text as T
diff --git a/src/Servant/JS/Internal.hs b/src/Servant/JS/Internal.hs
--- a/src/Servant/JS/Internal.hs
+++ b/src/Servant/JS/Internal.hs
@@ -45,10 +45,13 @@
   , Header
   ) where
 
+import           Prelude ()
+import           Prelude.Compat
+
 import           Control.Lens ((^.))
 import qualified Data.CharSet as Set
 import qualified Data.CharSet.Unicode.Category as Set
-import           Data.Monoid
+
 import qualified Data.Text as T
 import           Data.Text (Text)
 import           Servant.Foreign
diff --git a/src/Servant/JS/JQuery.hs b/src/Servant/JS/JQuery.hs
--- a/src/Servant/JS/JQuery.hs
+++ b/src/Servant/JS/JQuery.hs
@@ -1,9 +1,11 @@
 {-#LANGUAGE OverloadedStrings #-}
 module Servant.JS.JQuery where
 
+import           Prelude ()
+import           Prelude.Compat
+
 import           Control.Lens
 import           Data.Maybe (isJust)
-import           Data.Monoid
 import qualified Data.Text as T
 import           Data.Text (Text)
 import           Data.Text.Encoding (decodeUtf8)
diff --git a/src/Servant/JS/Vanilla.hs b/src/Servant/JS/Vanilla.hs
--- a/src/Servant/JS/Vanilla.hs
+++ b/src/Servant/JS/Vanilla.hs
@@ -1,13 +1,15 @@
 {-#LANGUAGE OverloadedStrings #-}
 module Servant.JS.Vanilla where
 
+import Prelude ()
+import Prelude.Compat
+
 import           Control.Lens
 import           Data.Maybe (isJust)
 import           Data.Text (Text)
 import           Data.Text.Encoding (decodeUtf8)
 import qualified Data.Text as T
-import           Data.Monoid
-import           Servant.Foreign
+import           Servant.Foreign hiding (header)
 import           Servant.JS.Internal
 
 -- | Generate vanilla javascript functions to make AJAX requests
@@ -34,7 +36,7 @@
  <> "  xhr.open('" <> decodeUtf8 method <> "', " <> url <> ", true);\n"
  <>    reqheaders
  <> "  xhr.setRequestHeader('Accept', 'application/json');\n"
- <> (if isJust (req ^. reqBody) then "  xhr.setRequestHeader('Content-Type', 'application/json');\n" else "")
+ <> (if isJust (req ^. reqBody) && (req ^. reqBodyContentType == ReqBodyJSON)  then "  xhr.setRequestHeader('Content-Type', 'application/json');\n" else "")
  <> "  xhr.onreadystatechange = function () {\n"
  <> "    var res = null;\n"
  <> "    if (xhr.readyState === 4) {\n"
@@ -79,7 +81,7 @@
 
         dataBody =
           if isJust (req ^. reqBody)
-            then "JSON.stringify(body)"
+            then if (req ^. reqBodyContentType == ReqBodyJSON) then "JSON.stringify(body)" else "body"
             else "null"
 
 
