diff --git a/IHaskell/Display/Juicypixels.hs b/IHaskell/Display/Juicypixels.hs
--- a/IHaskell/Display/Juicypixels.hs
+++ b/IHaskell/Display/Juicypixels.hs
@@ -2,93 +2,35 @@
 
 module IHaskell.Display.Juicypixels (module IHaskell.Display, module Codec.Picture) where
 
-import           Codec.Picture
-import           IHaskell.Display
-import           System.Directory
-import           System.IO.Unsafe
-import qualified Data.ByteString.Char8 as CBS
-
--- instances
-instance IHaskellDisplay DynamicImage where
-  display = displayImageAsJpg
-
-instance IHaskellDisplay (Image Pixel8) where
-  display = displayImageAsJpg . ImageY8
-
-instance IHaskellDisplay (Image Pixel16) where
-  display = displayImageAsJpg . ImageY16
-
-instance IHaskellDisplay (Image PixelF) where
-  display = displayImageAsJpg . ImageYF
-
-instance IHaskellDisplay (Image PixelYA8) where
-  display = displayImageAsJpg . ImageYA8
-
-instance IHaskellDisplay (Image PixelYA16) where
-  display = displayImageAsJpg . ImageYA16
-
-instance IHaskellDisplay (Image PixelRGB8) where
-  display = displayImageAsJpg . ImageRGB8
-
-instance IHaskellDisplay (Image PixelRGB16) where
-  display = displayImageAsJpg . ImageRGB16
-
-instance IHaskellDisplay (Image PixelRGBF) where
-  display = displayImageAsJpg . ImageRGBF
-
-instance IHaskellDisplay (Image PixelRGBA8) where
-  display = displayImageAsJpg . ImageRGBA8
-
-instance IHaskellDisplay (Image PixelRGBA16) where
-  display = displayImageAsJpg . ImageRGBA16
+import qualified Codec.Picture as P
+import           Codec.Picture (Image(..))
+import           Codec.Picture.Png (PngSavable, encodePng)
+import           IHaskell.Display (IHaskellDisplay, Display(..), display, png, base64)
+import           Data.ByteString.Lazy (ByteString, toStrict)
 
-instance IHaskellDisplay (Image PixelYCbCr8) where
-  display = displayImageAsJpg . ImageYCbCr8
+instance IHaskellDisplay (Image P.Pixel8) where
+  display = return . format
 
-instance IHaskellDisplay (Image PixelCMYK8) where
-  display = displayImageAsJpg . ImageCMYK8
+instance IHaskellDisplay (Image P.Pixel16) where
+  display = return . format
 
-instance IHaskellDisplay (Image PixelCMYK16) where
-  display = displayImageAsJpg . ImageCMYK16
+instance IHaskellDisplay (Image P.PixelYA8) where
+  display = return . format
 
--- main rendering function
-displayImageAsJpg :: DynamicImage -> IO Display
-displayImageAsJpg renderable = do
-  switchToTmpDir
+instance IHaskellDisplay (Image P.PixelYA16) where
+  display = return . format
 
-  let filename = ".ihaskell.juicypixels.jpg"
-  -- Write the image
-  saveJpgImage 95 filename renderable
-  -- Convert to base64.
-  imgData <- readFile filename
-  return $ Display [jpg (imWidth renderable) (imHeight renderable) $ base64 (CBS.pack imgData)]
+instance IHaskellDisplay (Image P.PixelRGB8) where
+  display = return . format
 
--- The type DynamicImage does not have a function to extract width and height
-imWidth :: DynamicImage -> Int
-imWidth img = w
-  where
-    (w, h) = imWidthHeight img
+instance IHaskellDisplay (Image P.PixelRGB16) where
+  display = return . format
 
-imHeight :: DynamicImage -> Int
-imHeight img = h
-  where
-    (w, h) = imWidthHeight img
+instance IHaskellDisplay (Image P.PixelRGBA8) where
+  display = return . format
 
--- Helper functions to pattern match on the DynamicImage Constructors
-imWidthHeight :: DynamicImage -> (Int, Int)
-imWidthHeight (ImageY8 im) = imWH im
-imWidthHeight (ImageY16 im) = imWH im
-imWidthHeight (ImageYF im) = imWH im
-imWidthHeight (ImageYA8 im) = imWH im
-imWidthHeight (ImageYA16 im) = imWH im
-imWidthHeight (ImageRGB8 im) = imWH im
-imWidthHeight (ImageRGB16 im) = imWH im
-imWidthHeight (ImageRGBF im) = imWH im
-imWidthHeight (ImageRGBA8 im) = imWH im
-imWidthHeight (ImageRGBA16 im) = imWH im
-imWidthHeight (ImageYCbCr8 im) = imWH im
-imWidthHeight (ImageCMYK8 im) = imWH im
-imWidthHeight (ImageCMYK16 im) = imWH im
+instance IHaskellDisplay (Image P.PixelRGBA16) where
+  display = return . format
 
-imWH :: Image a -> (Int, Int)
-imWH im = (imageWidth im, imageHeight im)
+format :: PngSavable a => Image a -> Display
+format im@(Image w h _) = Display [png w h . base64 . toStrict . encodePng $ im]
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,3 @@
-import Distribution.Simple
+import           Distribution.Simple
+
 main = defaultMain
diff --git a/ihaskell-juicypixels.cabal b/ihaskell-juicypixels.cabal
--- a/ihaskell-juicypixels.cabal
+++ b/ihaskell-juicypixels.cabal
@@ -7,7 +7,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.3.0.0
+version:             1.1.0.1
 
 -- A short (one-line) description of the package.
 synopsis:            IHaskell - IHaskellDisplay instances of the image types of the JuicyPixels package.
@@ -29,11 +29,13 @@
 license-file:        LICENSE
 
 -- The package author(s).
-author:              Roland Senn
+author:              Roland Senn,
+                     Will Yager
 
 -- An email address to which users can send suggestions, bug reports, and 
 -- patches.
-maintainer:          rsx@bluewin.ch
+maintainer:          rsx@bluewin.ch,
+                     will.yager@gmail.com
 
 -- A copyright notice.
 -- copyright:           
@@ -56,13 +58,9 @@
   
   -- Modules included in this library but not exported.
   -- other-modules:       
-  
-  -- Language extensions.
-  default-extensions: DoAndIfThenElse
-              OverloadedStrings
              
   -- Other library packages from which modules are imported.
-  build-depends:       base >=4.6 && <4.9,
+  build-depends:       base >=4.6 && <5,
                        bytestring,
                        directory,
                        JuicyPixels >= 3.1.3,
