diff --git a/lib/Servant/JuicyPixels.hs b/lib/Servant/JuicyPixels.hs
--- a/lib/Servant/JuicyPixels.hs
+++ b/lib/Servant/JuicyPixels.hs
@@ -1,24 +1,32 @@
-{-# LANGUAGE CPP                   #-}
-{-# LANGUAGE DataKinds             #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE KindSignatures        #-}
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE OverloadedStrings     #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeFamilies          #-}
-{-# LANGUAGE TypeOperators         #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
 
 module Servant.JuicyPixels where
 
-import Servant.API
-import GHC.TypeLits
-import qualified Network.HTTP.Media as M
 import Codec.Picture
+import Codec.Picture.Bitmap
+import Codec.Picture.Gif
+import Codec.Picture.HDR
+import Codec.Picture.Jpg
+import Codec.Picture.Metadata
+import Codec.Picture.Png
 import Codec.Picture.Saving
+import Codec.Picture.Tga
+import Codec.Picture.Tiff
 import Codec.Picture.Types
-import Data.Proxy
 import qualified Data.ByteString.Lazy as BL
-
+import Data.Proxy
+import GHC.TypeLits
+import qualified Network.HTTP.Media as M
+import Servant.API
 
 data BMP
 
@@ -28,9 +36,14 @@
 instance MimeRender BMP DynamicImage where
     mimeRender _ = imageToBitmap
 
+instance BmpEncodable pixel => MimeRender BMP (Image pixel, Metadatas) where
+    mimeRender _ (img, metadata) = encodeBitmapWithMetadata metadata img
+
 instance MimeUnrender BMP DynamicImage where
     mimeUnrender _ = decodeBitmap . BL.toStrict
 
+instance MimeUnrender BMP (DynamicImage, Metadatas) where
+    mimeUnrender _ = decodeBitmapWithMetadata . BL.toStrict
 
 data GIF
 
@@ -43,6 +56,8 @@
 instance MimeUnrender GIF DynamicImage where
     mimeUnrender _ = decodeGif . BL.toStrict
 
+instance MimeUnrender GIF (DynamicImage, Metadatas) where
+    mimeUnrender _ = decodeGifWithMetadata . BL.toStrict
 
 data JPEG (quality :: Nat)
 
@@ -58,9 +73,16 @@
     mimeRender _ = encodeJpegAtQuality quality . convertImage
       where quality = fromInteger $ natVal (Proxy :: Proxy quality)
 
+instance (KnownNat quality, quality <= 100, ColorSpaceConvertible a PixelYCbCr8) => MimeRender (JPEG quality) (Image a, Metadatas) where
+    mimeRender _ (img, metadata) = encodeJpegAtQualityWithMetadata quality metadata $ convertImage img
+      where
+        quality = fromInteger $ natVal (Proxy :: Proxy quality)
+
 instance (KnownNat quality, quality <= 100) => MimeUnrender (JPEG quality) DynamicImage where
     mimeUnrender _ = decodeJpeg . BL.toStrict
 
+instance (KnownNat quality, quality <= 100) => MimeUnrender (JPEG quality) (DynamicImage, Metadatas) where
+    mimeUnrender _ = decodeJpegWithMetadata . BL.toStrict
 
 data PNG
 
@@ -73,9 +95,14 @@
 instance PngSavable a => MimeRender PNG (Image a) where
     mimeRender _ = encodePng
 
+instance PngSavable a => MimeRender PNG (Image a, Metadatas) where
+    mimeRender _ (img, metadata) = encodePngWithMetadata metadata img
+
 instance MimeUnrender PNG DynamicImage where
     mimeUnrender _ = decodePng . BL.toStrict
 
+instance MimeUnrender PNG (DynamicImage, Metadatas) where
+    mimeUnrender _ = decodePngWithMetadata . BL.toStrict
 
 data TIFF
 
@@ -91,6 +118,8 @@
 instance MimeUnrender TIFF DynamicImage where
     mimeUnrender _ = decodeTiff . BL.toStrict
 
+instance MimeUnrender TIFF (DynamicImage, Metadatas) where
+    mimeUnrender _ = decodeTiffWithMetadata . BL.toStrict
 
 data RADIANCE
 
@@ -106,7 +135,9 @@
 instance MimeUnrender RADIANCE DynamicImage where
     mimeUnrender _ = decodeHDR . BL.toStrict
 
-#if MIN_VERSION_JuicyPixels(3,2,6)
+instance MimeUnrender RADIANCE (DynamicImage, Metadatas) where
+    mimeUnrender _ = decodeHDRWithMetadata . BL.toStrict
+
 data TGA
 
 instance Accept TGA where
@@ -120,4 +151,6 @@
 
 instance MimeUnrender TGA DynamicImage where
     mimeUnrender _ = decodeTga . BL.toStrict
-#endif
+
+instance MimeUnrender TGA (DynamicImage, Metadatas) where
+    mimeUnrender _ = decodeTgaWithMetadata . BL.toStrict
diff --git a/servant-JuicyPixels.cabal b/servant-JuicyPixels.cabal
--- a/servant-JuicyPixels.cabal
+++ b/servant-JuicyPixels.cabal
@@ -1,5 +1,5 @@
 name:                servant-JuicyPixels
-version:             0.3.0.6
+version:             0.3.1.0
 homepage:            https://github.com/tvh/servant-JuicyPixels
 license:             BSD3
 license-file:        LICENSE
@@ -21,7 +21,7 @@
   build-depends:       base >=4.7 && <5
                      , bytestring
                      , http-media
-                     , JuicyPixels >=3.2.5.3
+                     , JuicyPixels >=3.2.6
                      , servant >=0.4
   hs-source-dirs:      lib
   default-language:    Haskell2010
