diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+#### 0.19.0.2
+
+* Upgrade to `rest-core 0.38` to add support for `RawJson(AndXml)(I/O)`.
+
 #### 0.19.0.1
 
 * Allow `haskell-src-exts 1.17.*`.
diff --git a/rest-gen.cabal b/rest-gen.cabal
--- a/rest-gen.cabal
+++ b/rest-gen.cabal
@@ -1,5 +1,5 @@
 name:                rest-gen
-version:             0.19.0.1
+version:             0.19.0.2
 description:         Documentation and client generation from rest definition.
 synopsis:            Documentation and client generation from rest definition.
 maintainer:          code@silk.co
@@ -52,6 +52,7 @@
     , Cabal >= 1.16 && < 1.23
     , HStringTemplate >= 0.6 && < 0.9
     , aeson >= 0.7 && < 0.11
+    , base-compat >= 0.8 && < 0.10
     , blaze-html >= 0.5 && < 0.9
     , code-builder == 0.1.*
     , directory >= 1.1 && < 1.3
@@ -63,7 +64,7 @@
     , json-schema >= 0.6 && < 0.8
     , pretty >= 1.0 && < 1.2
     , process >= 1.0 && < 1.4
-    , rest-core >= 0.35 && < 0.38
+    , rest-core >= 0.38 && < 0.39
     , safe >= 0.2 && < 0.4
     , semigroups >= 0.5 && < 0.19
     , scientific >= 0.3.2 && < 0.4
@@ -85,7 +86,7 @@
     , HUnit >= 1.2 && < 1.4
     , fclabels >= 1.0.4 && < 2.1
     , haskell-src-exts >= 1.15.0 && < 1.18
-    , rest-core >= 0.35 && < 0.38
+    , rest-core >= 0.38 && < 0.39
     , rest-gen
     , test-framework == 0.8.*
     , test-framework-hunit == 0.3.*
diff --git a/src/Rest/Gen/Base/ActionInfo.hs b/src/Rest/Gen/Base/ActionInfo.hs
--- a/src/Rest/Gen/Base/ActionInfo.hs
+++ b/src/Rest/Gen/Base/ActionInfo.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE
-    DataKinds
-  , GADTs
-  , KindSignatures
+    GADTs
   , LambdaCase
-  , NoMonomorphismRestriction
+  , NoImplicitPrelude
   , ScopedTypeVariables
   , TemplateHaskell
   #-}
@@ -47,21 +45,19 @@
   , singleActionInfo
   ) where
 
-import Prelude hiding (id, (.))
+import Prelude.Compat hiding (id, (.))
 
-import Control.Applicative
 import Control.Category
 import Control.Monad
-import Data.Foldable (foldMap)
+import Data.Foldable (find)
 import Data.Label.Derive
-import Data.List
+import Data.List (intercalate, intersect, nub, sortBy)
 import Data.List.NonEmpty (NonEmpty)
 import Data.Maybe
 import Data.Ord
 import Data.Proxy
 import Data.Typeable
 import Safe
-import qualified Data.Foldable                as F
 import qualified Data.JSON.Schema             as J
 import qualified Data.Label.Total             as L
 import qualified Data.List.NonEmpty           as NList
@@ -160,7 +156,7 @@
     }
 
 chooseType :: NonEmpty DataDescription -> DataDescription
-chooseType ls = fromMaybe (NList.head ls) $ F.find ((JSON ==) . L.get (dataType . desc)) ls
+chooseType ls = fromMaybe (NList.head ls) $ find ((JSON ==) . L.get (dataType . desc)) ls
 
 data ResponseType = ResponseType
   { errorType  :: Maybe DataDesc
@@ -430,19 +426,23 @@
   where
     handlerInput :: Proxy i -> Input i -> DataDescription
     handlerInput d c = case c of
-      ReadI    -> L.set (haskellModules . desc) (modString d)
-                $ defaultDescription Other (describe d) (toHaskellType d)
-      StringI  -> defaultDescription String "String" haskellStringType
-      XmlI     -> L.set (haskellModules . desc) (modString d)
-                . L.set (dataSchema     . meta) (pure . X.showSchema  . X.getXmlSchema $ d)
-                . L.set (dataExample    . meta) (pure . X.showExample . X.getXmlSchema $ d)
-                $ defaultDescription XML "XML" (toHaskellType d)
-      XmlTextI -> defaultDescription XML "XML" haskellStringType
-      RawXmlI  -> defaultDescription XML "XML" haskellStringType
-      JsonI    -> L.set (haskellModules . desc) (modString d)
-                . L.set (dataExample    . meta) (J.showExamples . J.schema $ d)
-                $ defaultDescription JSON "JSON" (toHaskellType d)
-      FileI    -> defaultDescription File "File" haskellByteStringType
+      ReadI          -> L.set (haskellModules . desc) (modString d)
+                      $ defaultDescription Other (describe d) (toHaskellType d)
+      StringI        -> defaultDescription String "String" haskellStringType
+      XmlI           -> L.set (haskellModules . desc) (modString d)
+                      . L.set (dataSchema     . meta) (pure . X.showSchema  . X.getXmlSchema $ d)
+                      . L.set (dataExample    . meta) (pure . X.showExample . X.getXmlSchema $ d)
+                      $ defaultDescription XML "XML" (toHaskellType d)
+      XmlTextI       -> defaultDescription XML "XML" haskellStringType
+      RawXmlI        -> defaultDescription XML "XML" haskellStringType
+      JsonI          -> L.set (haskellModules . desc) (modString d)
+                      . L.set (dataExample    . meta) (J.showExamples . J.schema $ d)
+                      $ defaultDescription JSON "JSON" (toHaskellType d)
+      RawJsonI       -> defaultDescription JSON "JSON" haskellStringType
+      -- Picking JSON or XML is arbitrary here since both are possible
+      -- so we stick with the convention of preferring JSON.
+      RawJsonAndXmlI -> defaultDescription File "File" haskellByteStringType
+      FileI          -> defaultDescription File "File" haskellByteStringType
 
 -- | Extract output description from handlers
 handlerOutputs :: Handler m -> [DataDescription]
@@ -450,16 +450,20 @@
   where
     handlerOutput :: Proxy a -> Output a -> DataDescription
     handlerOutput d c = case c of
-      StringO -> defaultDescription String "String" haskellStringType
-      XmlO    -> L.set (haskellModules . desc) (modString d)
-               . L.set (dataSchema     . meta) (pure . X.showSchema  . X.getXmlSchema $ d)
-               . L.set (dataExample    . meta) (pure . X.showExample . X.getXmlSchema $ d)
-               $ defaultDescription XML "XML" (toHaskellType d)
-      RawXmlO -> defaultDescription XML "XML" haskellStringType
-      JsonO   -> L.set (haskellModules . desc) (modString d)
-               . L.set (dataExample    . meta) (J.showExamples . J.schema $ d)
-               $ defaultDescription JSON "JSON" (toHaskellType d)
-      FileO   -> defaultDescription File "File" haskellByteStringType
+      StringO        -> defaultDescription String "String" haskellStringType
+      XmlO           -> L.set (haskellModules . desc) (modString d)
+                      . L.set (dataSchema     . meta) (pure . X.showSchema  . X.getXmlSchema $ d)
+                      . L.set (dataExample    . meta) (pure . X.showExample . X.getXmlSchema $ d)
+                      $ defaultDescription XML "XML" (toHaskellType d)
+      RawXmlO        -> defaultDescription XML "XML" haskellStringType
+      JsonO          -> L.set (haskellModules . desc) (modString d)
+                      . L.set (dataExample    . meta) (J.showExamples . J.schema $ d)
+                      $ defaultDescription JSON "JSON" (toHaskellType d)
+      RawJsonO       -> defaultDescription JSON "JSON" haskellStringType
+      -- Picking JSON or XML is arbitrary here since both are possible
+      -- so we stick with the convention of preferring JSON.
+      RawJsonAndXmlO -> defaultDescription File "File" haskellStringType
+      FileO          -> defaultDescription File "File" haskellByteStringType
 
 -- | Extract input description from handlers
 handlerErrors :: Handler m -> [DataDescription]
diff --git a/src/Rest/Gen/Config.hs b/src/Rest/Gen/Config.hs
--- a/src/Rest/Gen/Config.hs
+++ b/src/Rest/Gen/Config.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE
-    TemplateHaskell
+    NoImplicitPrelude
+  , TemplateHaskell
   , TypeOperators
   #-}
 module Rest.Gen.Config
@@ -19,9 +20,8 @@
   , configFromArgs
   ) where
 
-import Prelude hiding (id, (.))
+import Prelude.Compat hiding (id, (.))
 
-import Control.Applicative
 import Control.Category
 import Data.Label
 import System.Console.GetOpt
diff --git a/src/Rest/Gen/Docs.hs b/src/Rest/Gen/Docs.hs
--- a/src/Rest/Gen/Docs.hs
+++ b/src/Rest/Gen/Docs.hs
@@ -1,13 +1,4 @@
-{-# LANGUAGE
-    EmptyDataDecls
-  , GADTs
-  , MultiParamTypeClasses
-  , OverlappingInstances
-  , ScopedTypeVariables
-  , TemplateHaskell
-  , TupleSections
-  , TypeFamilies
-  #-}
+{-# LANGUAGE TupleSections #-}
 module Rest.Gen.Docs
   ( DocsContext (..)
   , cdiv
