diff --git a/Graphics/ImageMagick/MagickCore/Exception.hs b/Graphics/ImageMagick/MagickCore/Exception.hs
--- a/Graphics/ImageMagick/MagickCore/Exception.hs
+++ b/Graphics/ImageMagick/MagickCore/Exception.hs
@@ -9,8 +9,6 @@
 
 import           Control.Exception.Base
 import           Data.Typeable
-import           Foreign
-import           Foreign.C.String
 import           Graphics.ImageMagick.MagickCore.Types
 
 data MagickWandException = MagickWandException ExceptionSeverity ExceptionType String
diff --git a/Graphics/ImageMagick/MagickCore/FFI/MagickCore.hsc b/Graphics/ImageMagick/MagickCore/FFI/MagickCore.hsc
deleted file mode 100644
--- a/Graphics/ImageMagick/MagickCore/FFI/MagickCore.hsc
+++ /dev/null
@@ -1,6 +0,0 @@
-module Graphics.ImageMagick.MagickCore.FFI.MagickCore
-  where
-
-import           Graphics.ImageMagick.MagickCore.Types
-
-
diff --git a/Graphics/ImageMagick/MagickCore/Gem.hs b/Graphics/ImageMagick/MagickCore/Gem.hs
--- a/Graphics/ImageMagick/MagickCore/Gem.hs
+++ b/Graphics/ImageMagick/MagickCore/Gem.hs
@@ -7,7 +7,8 @@
   , convertRGBToHWB
   ) where
 
-import Foreign.Storable         (peek)
+import Foreign.Ptr              (Ptr)
+import Foreign.Storable         (Storable, peek)
 import Foreign.Marshal.Alloc    (alloca)
 import Control.Monad.IO.Class
 import Control.Monad.Trans.Resource
@@ -15,6 +16,9 @@
 import qualified Graphics.ImageMagick.MagickCore.FFI.Gem as F
 
 
+with3 :: (Storable a, Storable b, Storable c) =>
+         (Ptr a -> Ptr b -> Ptr c -> IO ())
+       -> IO (a, b, c)
 with3 f = alloca (\x -> alloca (\y -> alloca (\z -> do 
               f x y z 
               x' <- peek x
@@ -22,6 +26,8 @@
               z' <- peek z
               return (x',y',z')
               )))
+
+map3 :: (a -> b) -> (a, a, a) -> (b, b, b)
 map3 f (a,b,c) = (f a, f b, f c)
 
 
diff --git a/Graphics/ImageMagick/MagickCore/Types/FFI/Distort.hsc b/Graphics/ImageMagick/MagickCore/Types/FFI/Distort.hsc
--- a/Graphics/ImageMagick/MagickCore/Types/FFI/Distort.hsc
+++ b/Graphics/ImageMagick/MagickCore/Types/FFI/Distort.hsc
@@ -30,6 +30,7 @@
   , sentinelDistortion = SentinelDistortion
 }
 
+bilinearDistortion :: DistortImageMethod
 bilinearDistortion = bilinearForwardDistortion
 
 newtype SparseColorMethod = SparseColorMethod { unSparseColorMethod :: CInt }
diff --git a/Graphics/ImageMagick/MagickCore/Types/FFI/Geometry.hsc b/Graphics/ImageMagick/MagickCore/Types/FFI/Geometry.hsc
--- a/Graphics/ImageMagick/MagickCore/Types/FFI/Geometry.hsc
+++ b/Graphics/ImageMagick/MagickCore/Types/FFI/Geometry.hsc
@@ -25,4 +25,6 @@
   , staticGravity = StaticGravity
 }
 
+undefinedGravity :: GravityType
 undefinedGravity = forgetGravity
+
diff --git a/Graphics/ImageMagick/MagickCore/Types/FFI/PixelPacket.hsc b/Graphics/ImageMagick/MagickCore/Types/FFI/PixelPacket.hsc
--- a/Graphics/ImageMagick/MagickCore/Types/FFI/PixelPacket.hsc
+++ b/Graphics/ImageMagick/MagickCore/Types/FFI/PixelPacket.hsc
@@ -4,10 +4,7 @@
 module Graphics.ImageMagick.MagickCore.Types.FFI.PixelPacket
     where
 
-import           Data.Int
-import           Data.Word
 import           Foreign
-import           Foreign.C.Types
 #include <magick/MagickCore.h>
 
 data PixelPacket 
@@ -16,10 +13,18 @@
   sizeOf = const #size PixelPacket
   alignment _ = 1
 
+pixelPacketGetRed, pixelPacketGetGreen, pixelPacketGetBlue
+                 , pixelPacketGetOpacity 
+  :: Storable a => Ptr b -> IO a
 pixelPacketGetRed     = #peek PixelPacket, red
 pixelPacketGetGreen   = #peek PixelPacket, green
 pixelPacketGetBlue    = #peek PixelPacket, blue
 pixelPacketGetOpacity = #peek PixelPacket, opacity
+
+pixelPacketSetRed, pixelPacketSetGreen, pixelPacketSetBlue
+                 , pixelPacketSetOpacity
+  :: Storable a => Ptr b -> a -> IO ()
+
 pixelPacketSetRed     = #poke PixelPacket, red
 pixelPacketSetGreen   = #poke PixelPacket, green
 pixelPacketSetBlue    = #poke PixelPacket, blue
diff --git a/Graphics/ImageMagick/MagickCore/Types/FFI/Types.hsc b/Graphics/ImageMagick/MagickCore/Types/FFI/Types.hsc
--- a/Graphics/ImageMagick/MagickCore/Types/FFI/Types.hsc
+++ b/Graphics/ImageMagick/MagickCore/Types/FFI/Types.hsc
@@ -6,8 +6,6 @@
 
 import           Data.Int
 import           Data.Word
-import           Foreign.C.String
-import           Foreign.C.Types
 #include <magick/MagickCore.h>
 
 type MagickRealType   = #type MagickRealType
diff --git a/Graphics/ImageMagick/MagickWand/DrawingWand.hs b/Graphics/ImageMagick/MagickWand/DrawingWand.hs
--- a/Graphics/ImageMagick/MagickWand/DrawingWand.hs
+++ b/Graphics/ImageMagick/MagickWand/DrawingWand.hs
@@ -161,12 +161,13 @@
 -- , pushDrawingWand]
   ) where
 
+import           Control.Monad (void)
 import           Control.Monad.IO.Class
 import           Control.Monad.Trans.Resource
 import           Data.ByteString                                 (ByteString, useAsCString)
 import           Data.Text                                       (Text)
 import           Data.Text.Encoding                              (encodeUtf8)
-import           Foreign                                         hiding (rotate)
+import           Foreign                                         hiding (rotate, void)
 import           Foreign.C.Types                                 ()
 import           Graphics.ImageMagick.MagickCore.Types
 import qualified Graphics.ImageMagick.MagickWand.FFI.DrawingWand as F
diff --git a/Graphics/ImageMagick/MagickWand/FFI/Types.hsc b/Graphics/ImageMagick/MagickWand/FFI/Types.hsc
--- a/Graphics/ImageMagick/MagickWand/FFI/Types.hsc
+++ b/Graphics/ImageMagick/MagickWand/FFI/Types.hsc
@@ -9,7 +9,6 @@
 
 import Foreign
 import Foreign.C.Types
-import Graphics.ImageMagick.MagickCore.Types.FFI.Types
 
 data PixelIterator
 data MagickWand
@@ -77,11 +76,17 @@
   sizeOf = const #size MagickPixelPacket
   alignment _ = 1
 
+getPixelRed, getPixelGreen, getPixelBlue, getPixelIndex
+  :: Storable a => Ptr b -> IO a
 
 getPixelRed   = #peek MagickPixelPacket, red
 getPixelGreen = #peek MagickPixelPacket, green
 getPixelBlue  = #peek MagickPixelPacket, blue
 getPixelIndex = #peek MagickPixelPacket, index
+
+setPixelRed, setPixelGreen, setPixelBlue, setPixelIndex
+  :: Storable a => Ptr b -> a -> IO ()
+  
 setPixelRed   = #poke MagickPixelPacket, red
 setPixelGreen = #poke MagickPixelPacket, green
 setPixelBlue  = #poke MagickPixelPacket, blue
diff --git a/Graphics/ImageMagick/MagickWand/MagickWand.hs b/Graphics/ImageMagick/MagickWand/MagickWand.hs
--- a/Graphics/ImageMagick/MagickWand/MagickWand.hs
+++ b/Graphics/ImageMagick/MagickWand/MagickWand.hs
@@ -124,12 +124,14 @@
 -- end of the work, should wrap all MagickWand functions
 -- withMagickWandGenesis :: IO a -> IO a
 -- withMagickWandGenesis :: (MonadCatchIO m, MonadBaseControl IO m, MonadCatchIO (ResourceT IO)) => (ResourceT m c) -> m c
+withMagickWandGenesis :: ResourceT IO c -> IO c
 withMagickWandGenesis f = bracket start finish (\_ -> runResourceT f)
   where
     start = liftIO F.magickWandGenesis
     finish = liftIO . const F.magickWandTerminus
 
 -- | Open a nested block inside genesis (for tracking nested resources)
+localGenesis :: MonadBaseControl IO m => ResourceT m a -> m a
 localGenesis f = runResourceT f
 
 magickWand :: (MonadResource m) => m (ReleaseKey, Ptr MagickWand)
diff --git a/Graphics/ImageMagick/MagickWand/PixelWand.hs b/Graphics/ImageMagick/MagickWand/PixelWand.hs
--- a/Graphics/ImageMagick/MagickWand/PixelWand.hs
+++ b/Graphics/ImageMagick/MagickWand/PixelWand.hs
@@ -41,6 +41,7 @@
                                                                 packCString,
                                                                 useAsCString)
 import           Foreign                                       hiding (void)
+import           Foreign.C.Types (CDouble)
 
 import qualified Graphics.ImageMagick.MagickWand.FFI.PixelWand as F
 import           Graphics.ImageMagick.MagickWand.Types
@@ -217,11 +218,16 @@
 getYellow = (fmap realToFrac) . liftIO . F.pixelGetYellow
 
 ---
+with3 ::
+  (Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ())
+  -> IO (CDouble, CDouble, CDouble)
 with3 f = alloca (\x -> alloca (\y -> alloca (\z -> do
-              f x y z
+              _ <- f x y z
               x' <- peek x
               y' <- peek y
               z' <- peek z
               return (x',y',z')
               )))
+
+map3 :: (a -> b) -> (a, a, a) -> (b, b, b)
 map3 f (a,b,c) = (f a, f b, f c)
diff --git a/Graphics/ImageMagick/MagickWand/WandImage.hs b/Graphics/ImageMagick/MagickWand/WandImage.hs
--- a/Graphics/ImageMagick/MagickWand/WandImage.hs
+++ b/Graphics/ImageMagick/MagickWand/WandImage.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE ScopedTypeVariables, CPP #-}
 module Graphics.ImageMagick.MagickWand.WandImage
   ( getImageHeight
   , getImageWidth
@@ -330,6 +330,7 @@
   ) where
 
 import           Control.Applicative                            ((<$>))
+import           Control.Monad (void)
 import           Control.Monad.IO.Class
 import           Control.Monad.Trans.Resource
 import           Data.ByteString                                (ByteString,
@@ -344,7 +345,7 @@
 import           Data.Vector.Storable                           (Vector)
 import qualified Data.Vector.Storable                           as V
 import           Filesystem.Path.CurrentOS
-import           Foreign
+import           Foreign hiding (void)
 import           Foreign.C.Types
 import           Graphics.ImageMagick.MagickCore.Types
 import qualified Graphics.ImageMagick.MagickWand.FFI.MagickWand as F
@@ -490,10 +491,10 @@
            -> Maybe (FilePath)
            -> m ()
 writeImage w Nothing   = withException_ w $ F.magickWriteImage w nullPtr
-writeImage w (Just fn) = withException_ w $ useAsCString (encode fn) (\f -> F.magickWriteImage w f)
+writeImage w (Just fn) = withException_ w $ useAsCString (_toBS $ encode fn) (\f -> F.magickWriteImage w f)
 
 writeImages :: (MonadResource m) => Ptr MagickWand -> FilePath -> Bool -> m ()
-writeImages w fn b = withException_ w $ useAsCString (encode fn) (\f -> F.magickWriteImages w f (toMBool b))
+writeImages w fn b = withException_ w $ useAsCString (_toBS $ encode fn) (\f -> F.magickWriteImages w f (toMBool b))
 
 -- | MagickBlurImage() blurs an image. We convolve the image with a gaussian
 -- operator of the given radius and standard deviation (sigma). For reasonable
@@ -871,7 +872,7 @@
 -- | Reads an image or image sequence. The images are inserted at
 -- the current image pointer position
 readImage :: (MonadResource m) => Ptr MagickWand -> FilePath -> m ()
-readImage w fn = withException_ w $ useAsCString (encode fn) (F.magickReadImage w)
+readImage w fn = withException_ w $ useAsCString (_toBS $ encode fn) (F.magickReadImage w)
 
 -- | Reads an image or image sequence from a blob
 readImageBlob :: (MonadResource m) => PMagickWand -> ByteString -> m ()
@@ -904,3 +905,12 @@
 -- | Sets image Type
 setImageType :: (MonadResource m) => PMagickWand -> ImageType -> m ()
 setImageType w imageType = withException_ w $ F.magickSetImageType w imageType
+
+
+-- | Convert system specific filepath to bytestring
+_toBS = 
+#if defined(CABAL_OS_WINDOWS) || defined(CABAL_OS_DARWIN)
+    encodeUTF8
+#else
+    id
+#endif
diff --git a/imagemagick.cabal b/imagemagick.cabal
--- a/imagemagick.cabal
+++ b/imagemagick.cabal
@@ -1,5 +1,5 @@
 Name:                imagemagick
-Version:             0.0.2
+Version:             0.0.3
 Synopsis:            bindings to imagemagick library
 License:             OtherLicense
 License-file:        LICENSE
@@ -20,7 +20,6 @@
   Exposed-modules:      Graphics.ImageMagick.MagickCore
                       , Graphics.ImageMagick.MagickCore.FFI.Gem
                       , Graphics.ImageMagick.MagickCore.FFI.Log
-                      , Graphics.ImageMagick.MagickCore.FFI.MagickCore
                       , Graphics.ImageMagick.MagickCore.FFI.Mime
                       , Graphics.ImageMagick.MagickCore.FFI.Option
                       , Graphics.ImageMagick.MagickCore.Types.FFI.CacheView
@@ -73,10 +72,16 @@
                       , bytestring >= 0.9 && <0.11
                       , text == 0.11.*
                       , system-filepath == 0.4.*
+                      , MonadCatchIO-transformers == 0.3.*
   extensions:         EmptyDataDecls
   Ghc-options:        -Wall
   pkgconfig-depends:  ImageMagick, MagickWand
   Build-tools:        hsc2hs
+  if os(windows)
+      cpp-options: -DCABAL_OS_WINDOWS
+  if os(darwin)
+      cpp-options: -DCABAL_OS_DARWIN
+
 
 
 executable            resize
