diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+#### 0.2.0.4
+
+* Allow rest-core-0.39.
+
 #### 0.2.0.3
 
 * Update lots of dependencies.
diff --git a/example-api/Api.hs b/example-api/Api.hs
--- a/example-api/Api.hs
+++ b/example-api/Api.hs
@@ -13,7 +13,7 @@
 
 -- | Defines a versioned api
 api :: Api BlogApi
-api = [(mkVersion 1 0 0, Some1 blog)]
+api = Versioned [(mkVersion 1 0 0, Some1 blog)]
 
 -- | The entire routing table for v1.0.0 of the blog
 blog :: Router BlogApi BlogApi
diff --git a/example-api/Api/Post.hs b/example-api/Api/Post.hs
--- a/example-api/Api/Post.hs
+++ b/example-api/Api/Post.hs
@@ -1,4 +1,7 @@
-{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE
+    DeriveDataTypeable
+  , NoImplicitPrelude
+  #-}
 module Api.Post
   ( Identifier (..)
   , WithPost
@@ -6,7 +9,8 @@
   , postFromIdentifier
   ) where
 
-import Control.Applicative
+import Prelude.Compat
+
 import Control.Concurrent.STM (STM, TVar, atomically, modifyTVar, readTVar)
 import Control.Monad (unless)
 import Control.Monad.Error.Class
diff --git a/example-api/Api/Test.hs b/example-api/Api/Test.hs
--- a/example-api/Api/Test.hs
+++ b/example-api/Api/Test.hs
@@ -5,21 +5,31 @@
   , OverloadedStrings
   , ScopedTypeVariables
   #-}
-module Api.Test where
+module Api.Test
+  ( resource
+  , WithText
+  , Err (..)
+  , Ok (..)
+  ) where
 
-import Control.Monad.Error.Class
+import Control.Monad.Except
 import Control.Monad.Reader
 import Data.Aeson
+import Data.ByteString.Lazy (ByteString)
 import Data.Data
 import Data.JSON.Schema
+import Data.Maybe
 import Data.Text (Text)
 import GHC.Generics
 import Generics.Generic.Aeson
 import Generics.XmlPickler
+import Safe
 import Text.XML.HXT.Arrow.Pickle
 
 import Rest
-import qualified Rest.Resource as R
+import Rest.Dictionary
+import qualified Rest.Driver.Perform as Driver (accept)
+import qualified Rest.Resource       as R
 
 import ApiTypes
 import qualified Api.Test.Err2 as E2
@@ -51,7 +61,10 @@
                 , ("differentFormats"   , differentFormats   )
                 , ("intersectedFormats" , intersectedFormats )
                 , ("intersectedFormats2", intersectedFormats2)
-                , ("errorImport"        , errorImport        )
+                , ("rawXmlIO"           , rawXmlIO           )
+                , ("rawJsonIO"          , rawJsonIO          )
+                , ("rawJsonAndXmlI"     , rawJsonAndXmlI_    )
+                , ("rawJsonAndXmlO"     , rawJsonAndXmlO_    )
                 , ("noError"            , noError            )
                 , ("justStringO"        , justStringO        )
                 , ("preferJson"         , preferJson         )
@@ -85,11 +98,43 @@
     "error" -> throwError $ domainReason Err
     _       -> return Ok
 
-errorImport :: Handler WithText
-errorImport = mkIdHandler (stringI . rawXmlO . xmlE) $ \s (_::Text) ->
+rawXmlIO :: Handler WithText
+rawXmlIO = mkIdHandler (rawXmlI . rawXmlO . xmlE) $ \s _ ->
   case s of
-    "error" -> throwError $ domainReason E2.Err
-    _       -> return "<ok/>"
+    "<error/>" -> throwError $ domainReason E2.Err
+    _          -> return "<ok/>"
+
+rawJsonIO :: Handler WithText
+rawJsonIO = mkIdHandler (rawJsonI . rawJsonO . jsonE) $ \s _ ->
+  case s of
+    "\"error\"" -> throwError $ domainReason E2.Err
+    _           -> return "\"ok\""
+
+rawJsonAndXmlI_ :: Handler WithText
+rawJsonAndXmlI_ = mkInputHandler (stringO . rawJsonAndXmlI) handler
+  where
+    handler :: Either Json Xml -> ExceptT Reason_ WithText String
+    handler = return . \case
+      Left (Json _) -> "json input"
+      Right (Xml _) -> "xml input"
+
+rawJsonAndXmlO_ :: Handler WithText
+rawJsonAndXmlO_ = mkHandler (addHeader contentType . mkHeader accept . mkPar typeParam . rawJsonAndXmlO) handler
+  where
+    handler :: Env (Maybe String, Maybe String) (Maybe String) () -> ExceptT Reason_ WithText ByteString
+    handler (Env (mContentType, mAccept) mType ()) = do
+      let accs = Driver.accept mAccept mContentType mType
+      if JsonFormat `elem` accs
+        then return "\"json\""
+        else if XmlFormat `elem` accs
+          then return "<xml/>"
+          else throwError . OutputError $ UnsupportedFormat "Only json and xml accept headers are allowed"
+    contentType :: Header (Maybe String)
+    contentType  = Header ["Content-Type"] (return . headMay . catMaybes)
+    typeParam   :: Param (Maybe String)
+    typeParam    = Param ["type"] (return . headMay . catMaybes)
+    accept      :: Header (Maybe String)
+    accept       = Header ["Accept"] (return . headMay . catMaybes)
 
 noError :: Handler WithText
 noError = mkConstHandler jsonO $ return Ok
diff --git a/example-api/Api/Test/Err2.hs b/example-api/Api/Test/Err2.hs
--- a/example-api/Api/Test/Err2.hs
+++ b/example-api/Api/Test/Err2.hs
@@ -2,7 +2,7 @@
     DeriveDataTypeable
   , DeriveGeneric
   #-}
-module Api.Test.Err2 where
+module Api.Test.Err2 (Err (..)) where
 
 import Data.Aeson
 import Data.Data
diff --git a/example-api/Api/Test/ReservedName.hs b/example-api/Api/Test/ReservedName.hs
--- a/example-api/Api/Test/ReservedName.hs
+++ b/example-api/Api/Test/ReservedName.hs
@@ -7,7 +7,7 @@
   , TemplateHaskell
   , TypeFamilies
   #-}
-module Api.Test.ReservedName where
+module Api.Test.ReservedName (resource) where
 
 import Control.Monad.Reader
 import Data.Text (Text)
diff --git a/example-api/Api/User.hs b/example-api/Api/User.hs
--- a/example-api/Api/User.hs
+++ b/example-api/Api/User.hs
@@ -1,6 +1,8 @@
+{-# LANGUAGE NoImplicitPrelude #-}
 module Api.User (resource) where
 
-import Control.Applicative ((<$>))
+import Prelude.Compat
+
 import Control.Concurrent.STM (atomically, modifyTVar, readTVar)
 import Control.Monad.Error.Class (throwError)
 import Control.Monad.Reader (ReaderT, asks)
diff --git a/example-api/ApiTypes.hs b/example-api/ApiTypes.hs
--- a/example-api/ApiTypes.hs
+++ b/example-api/ApiTypes.hs
@@ -1,7 +1,11 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE
+    GeneralizedNewtypeDeriving
+  , NoImplicitPrelude
+  #-}
 module ApiTypes where
 
-import Control.Applicative (Applicative)
+import Prelude.Compat
+
 import Control.Concurrent.STM (TVar)
 import Control.Monad.Reader (MonadReader, ReaderT (..))
 import Control.Monad.Trans (MonadIO)
diff --git a/example-api/Example.hs b/example-api/Example.hs
--- a/example-api/Example.hs
+++ b/example-api/Example.hs
@@ -1,7 +1,11 @@
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE
+    NoImplicitPrelude
+  , OverloadedStrings
+  #-}
 module Example (exampleBlog) where
 
-import Control.Applicative
+import Prelude.Compat
+
 import Control.Concurrent.STM (newTVarIO)
 import Data.HashMap.Strict (HashMap)
 import Data.Set (Set)
diff --git a/rest-example.cabal b/rest-example.cabal
--- a/rest-example.cabal
+++ b/rest-example.cabal
@@ -1,5 +1,5 @@
 name:                rest-example
-version:             0.2.0.3
+version:             0.2.0.4
 synopsis:            Example project for rest
 homepage:            http://www.github.com/silkapp/rest
 license:             BSD3
@@ -41,17 +41,19 @@
     Type.UserSignupError
   build-depends:
       base >= 4.6 && < 4.9
-    , aeson >= 0.7 && < 0.11
+    , aeson >= 0.7 && < 0.12
+    , base-compat >= 0.8 && < 0.10
+    , bytestring >= 0.9 && < 0.11
     , containers >= 0.3 && < 0.6
     , generic-aeson == 0.2.*
     , hxt == 9.3.*
     , json-schema >= 0.6 && < 0.8
     , mtl >= 2.0 && < 2.3
     , generic-xmlpickler >= 0.1.0.1 && < 0.2
-    , rest-core >= 0.36 && < 0.38
+    , rest-core >= 0.39 && < 0.40
     , safe >= 0.2 && < 0.4
-    , transformers >= 0.2 && < 0.5
-    , transformers-compat == 0.4.*
+    , transformers >= 0.2 && < 0.6
+    , transformers-compat >= 0.4 && < 0.6
     , stm >= 2.1 && < 2.5
     , text >= 0.11 && < 1.3
     , time >= 1.1 && < 1.6
@@ -89,11 +91,12 @@
     buildable: True
     build-depends:
         base >= 4.6 && < 4.9
+      , base-compat >= 0.8 && < 0.10
       , happstack-server >= 7.1 && < 7.5
       , mtl >= 2.0 && < 2.3
       , rest-example
       , rest-happstack >= 0.2 && < 0.4
-      , transformers-compat == 0.4.*
+      , transformers-compat >= 0.4 && < 0.6
   else
     buildable: False
 
@@ -106,9 +109,10 @@
     buildable: True
     build-depends:
         base >= 4.6 && < 4.9
+      , base-compat >= 0.8 && < 0.10
       , rest-example
       , rest-wai >= 0.1 && < 0.3
-      , warp >= 2.1 && < 3.2
+      , warp >= 2.1 && < 3.3
   else
     buildable: False
 
@@ -121,13 +125,14 @@
     buildable: True
     build-depends:
         base >= 4.6 && < 4.9
+      , base-compat >= 0.8 && < 0.10
       , mtl >= 2.0 && < 2.3
-      , rest-core >= 0.36 && < 0.38
+      , rest-core >= 0.39 && < 0.40
       , rest-example
       , rest-snap >= 0.1 && < 0.3
       , snap-core == 0.9.*
       , snap-server == 0.9.*
-      , transformers-compat == 0.4.*
+      , transformers-compat >= 0.4 && < 0.6
   else
     buildable: False
 
@@ -140,6 +145,7 @@
     buildable: True
     build-depends:
         base >= 4.6 && < 4.9
+      , base-compat >= 0.8 && < 0.10
       , rest-example
       , rest-gen >= 0.14 && < 0.20
   else
