diff --git a/Graphics/Imlib.hs b/Graphics/Imlib.hs
--- a/Graphics/Imlib.hs
+++ b/Graphics/Imlib.hs
@@ -1,8 +1,8 @@
 {-# OPTIONS -fffi -fglasgow-exts #-}
 
-{- 
+{-
 * Haskell Binding for Imlib 2
-* Copyright (c) 2004-2007, Cale Gibbard
+* Copyright (c) 2004-2008, Cale Gibbard
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
@@ -57,9 +57,9 @@
 {- -- List of what is not imported --
 
  -- This list contains anything that interfaces with X (i.e. uses Display/Visual/Drawable/Colormap/Pixmap)
- 
+
  -- Apart from that, the only thing that is in this list is imlib_apply_filter (which is rather unfortunate,
- -- since it's a cool feature). It uses va_args, so perhaps some Template Haskell is in order.
+ -- since it's a cool feature). It uses va_args.
 
 int imlib_get_visual_depth(Display *display, Visual *visual);
 Visual *imlib_get_best_visual(Display *display, int screen, int *depth_return);
@@ -96,46 +96,46 @@
 -}
 
 module Graphics.Imlib (
-    ImlibProgressFunction, ImlibDataDestructorFunction, 
+    ImlibProgressFunction, ImlibDataDestructorFunction,
     ImlibTTFEncoding (..), ImlibLoadError (..), ImlibTextDirection (..),
-    ImlibOperation (..), ImlibColor (..), ImlibBorder (..), ImlibPolygon, 
-    ImlibFilter, ImlibColorRange, ImlibFont, ImlibUpdates, 
+    ImlibOperation (..), ImlibColor (..), ImlibBorder (..), ImlibPolygon,
+    ImlibFilter, ImlibColorRange, ImlibFont, ImlibUpdates,
     ImlibColorModifier, ImlibImage, ImlibContext,
-    contextSetDitherMask, contextSetAntiAlias, contextSetDither, 
+    contextSetDitherMask, contextSetAntiAlias, contextSetDither,
     contextSetBlend, contextSetColorModifier, contextSetOperation,
-    contextSetFont, contextSetDirection, contextSetAngle, contextSetColor, 
-    contextSetColorCmya, contextSetColorHsva, contextSetColorHlsa, 
-    contextSetColorRange, contextSetProgressFunction, 
-    contextSetProgressGranularity, contextSetFilter, contextSetImage, 
-    contextGetDitherMask, contextGetAntiAlias, contextGetDither, 
-    contextGetBlend, contextGetColorModifier, contextGetOperation, 
-    contextGetFont, contextGetAngle, contextGetDirection, contextGetColor, 
-    contextGetColorCmya, contextGetColorHsva, contextGetColorHlsa, 
+    contextSetFont, contextSetDirection, contextSetAngle, contextSetColor,
+    contextSetColorCmya, contextSetColorHsva, contextSetColorHlsa,
+    contextSetColorRange, contextSetProgressFunction,
+    contextSetProgressGranularity, contextSetFilter, contextSetImage,
+    contextGetDitherMask, contextGetAntiAlias, contextGetDither,
+    contextGetBlend, contextGetColorModifier, contextGetOperation,
+    contextGetFont, contextGetAngle, contextGetDirection, contextGetColor,
+    contextGetColorCmya, contextGetColorHsva, contextGetColorHlsa,
     contextGetImlibColor, contextGetColorRange, contextGetProgressFunction,
-    contextGetProgressGranularity, contextGetImage, contextGetFilter, 
-    getCacheSize, setCacheSize, getColorUsage, setColorUsage, 
+    contextGetProgressGranularity, contextGetImage, contextGetFilter,
+    getCacheSize, setCacheSize, getColorUsage, setColorUsage,
     flushLoaders, loadImage, loadImageImmediately, loadImageWithoutCache,
     loadImageImmediatelyWithoutCache, loadImageWithErrorReturn, freeImage,
-    freeImageAndDecache, imageGetWidth, imageGetHeight, imageGetFilename, 
-    imageGetData, imageGetDataForReadingOnly, imagePutBackData, 
+    freeImageAndDecache, imageGetWidth, imageGetHeight, imageGetFilename,
+    imageGetData, imageGetDataForReadingOnly, imagePutBackData,
     imageWithData, imageHasAlpha, imageSetChangesOnDisk, imageGetBorder,
-    imageSetBorder, imageSetFormat, imageSetIrrelevantFormat, 
-    imageSetIrrelevantBorder, imageSetIrrelevantAlpha, imageFormat, 
-    imageSetHasAlpha, blendImageOntoImage, createImage, 
+    imageSetBorder, imageSetFormat, imageSetIrrelevantFormat,
+    imageSetIrrelevantBorder, imageSetIrrelevantAlpha, imageFormat,
+    imageSetHasAlpha, blendImageOntoImage, createImage,
     createImageUsingData, createImageUsingCopiedData, cloneImage,
-    createCroppedImage, createCroppedScaledImage, updatesClone, 
+    createCroppedImage, createCroppedScaledImage, updatesClone,
     updateAppendRect, updatesMerge, updatesMergeForRendering,
-    updatesFree, updatesGetNext, updatesGetCoordinates, 
-    updatesSetCoordinates, updatesInit, updatesAppendUpdates, 
-    imageFlipHorizontal, imageFlipVertical, imageFlipDiagonal, 
-    imageOrientate, imageBlur, imageSharpen, imageTileHorizontal, 
-    imageTileVertical, imageTile, loadFont, freeFont, textDraw, 
+    updatesFree, updatesGetNext, updatesGetCoordinates,
+    updatesSetCoordinates, updatesInit, updatesAppendUpdates,
+    imageFlipHorizontal, imageFlipVertical, imageFlipDiagonal,
+    imageOrientate, imageBlur, imageSharpen, imageTileHorizontal,
+    imageTileVertical, imageTile, loadFont, freeFont, textDraw,
     textDrawWithReturnMetrics, getTextSize, getTextAdvance, getTextInset,
-    addPathToFontPath, removePathFromFontPath, listFontPath, 
+    addPathToFontPath, removePathFromFontPath, listFontPath,
     textGetIndexAndLocation, textGetLocationAtIndex, listFonts,
-    getFontCacheSize, setFontCacheSize, flushFontCache, getFontAscent, 
+    getFontCacheSize, setFontCacheSize, flushFontCache, getFontAscent,
     getFontDescent, getMaximumFontAscent, getMaximumFontDescent,
-    createColorModifier, freeColorModifier, modifyColorModifierGamma, 
+    createColorModifier, freeColorModifier, modifyColorModifierGamma,
     modifyColorModifierBrightness, modifyColorModifierContrast,
     setColorModifierTables, getColorModifierTables, resetColorModifier, 
     applyColorModifier, applyColorModifierToRectangle, imageDrawLine, 
@@ -149,7 +149,7 @@
     imageRemoveAndFreeAttachedDataValue, saveImage, 
     saveImageWithErrorReturn, createRotatedImage, 
     blendImageOntoImageAtAngle, blendImageOntoImageSkewed, 
-    contextSetCliprect, {-clipLine,-} polygonNew, polygonFree, 
+    contextSetCliprect, polygonNew, polygonFree, 
     polygonAddPoint, imageDrawPolygon, imageFillPolygon, polygonGetBounds, 
     polygonContainsPoint, imageDrawEllipse, imageFillEllipse, imageFilter, 
     createFilter, freeFilter, filterSet, filterSetAlpha, filterSetRed, 
@@ -164,6 +164,8 @@
 import Data.Array
 import Control.Monad
 
+import Graphics.X11.Types
+
 {- Types from the Imlib 2 header
 typedef void *ImlibContext;
 typedef void *ImlibImage;
@@ -198,19 +200,18 @@
 
 data ImlibBorder = ImlibBorder Int Int Int Int deriving (Show, Eq) -- left, right, top, bottom
 instance Storable ImlibBorder where
-    sizeOf x = 16 
-    alignment x = 4
+    sizeOf _ = 16
+    alignment _ = 4
     peek p = do
         [a,b,c,d] <- peekArray 4 (castPtr p)
         return (ImlibBorder a b c d)
-        where
-    poke p (ImlibBorder a b c d) = do
+    poke p (ImlibBorder a b c d) =
         pokeArray (castPtr p) [a,b,c,d]
 
 data ImlibColor = ImlibColor Word32 Word32 Word32 Word32 deriving (Show, Eq) -- alpha, red, green, blue
 instance Storable ImlibColor where
-    sizeOf x = 16
-    alignment x = 4
+    sizeOf _ = 16
+    alignment _ = 4
     peek p = do
         [a,b,c,d] <- peekArray 4 (castPtr p)
         return (ImlibColor a b c d)
@@ -223,14 +224,14 @@
                     | ImlibOpSubtract -- 2
                     | ImlibOpReshade  -- 3
     deriving (Enum, Show, Eq)
-                     
+
 data ImlibTextDirection = ImlibTextToRight -- 0
                         | ImlibTextToLeft  -- 1
                         | ImlibTextToDown  -- 2
                         | ImlibTextToUp    -- 3
                         | ImlibTextToAngle -- 4
     deriving (Enum, Show, Eq)
-                          
+
 data ImlibLoadError = ImlibLoadErrorNone                           -- 0
                     | ImlibLoadErrorFileDoesNotExist               -- 1
                     | ImlibLoadErrorFileIsDirectory                -- 2
@@ -281,22 +282,27 @@
 
 --void imlib_context_set_dither_mask(char dither_mask);
 foreign import ccall "static Imlib2.h imlib_context_set_dither_mask" imlibContextSetDitherMask :: Bool -> IO ()
+contextSetDitherMask :: Bool -> IO ()
 contextSetDitherMask = imlibContextSetDitherMask
 
 --void imlib_context_set_anti_alias(char anti_alias);
 foreign import ccall "static Imlib2.h imlib_context_set_anti_alias" imlibContextSetAntiAlias :: Bool -> IO ()
+contextSetAntiAlias :: Bool -> IO ()
 contextSetAntiAlias = imlibContextSetAntiAlias
 
 --void imlib_context_set_dither(char dither);
 foreign import ccall "static Imlib2.h imlib_context_set_dither" imlibContextSetDither :: Bool -> IO ()
+contextSetDither :: Bool -> IO ()
 contextSetDither = imlibContextSetDither
 
 --void imlib_context_set_blend(char blend);
 foreign import ccall "static Imlib2.h imlib_context_set_blend" imlibContextSetBlend :: Bool -> IO ()
+contextSetBlend :: Bool -> IO ()
 contextSetBlend = imlibContextSetBlend
 
 --void imlib_context_set_color_modifier(Imlib_Color_Modifier color_modifier);
 foreign import ccall "static Imlib2.h imlib_context_set_color_modifier" imlibContextSetColorModifier :: ImlibColorModifier -> IO ()
+contextSetColorModifier :: ImlibColorModifier -> IO ()
 contextSetColorModifier = imlibContextSetColorModifier
 
 --void imlib_context_set_operation(Imlib_Operation operation);
@@ -306,6 +312,7 @@
 
 --void imlib_context_set_font(Imlib_Font font);
 foreign import ccall "static Imlib2.h imlib_context_set_font" imlibContextSetFont :: ImlibFont -> IO ()
+contextSetFont :: ImlibFont -> IO ()
 contextSetFont = imlibContextSetFont
 
 --void imlib_context_set_direction(Imlib_Text_Direction direction);
@@ -315,14 +322,17 @@
 
 --void imlib_context_set_angle(double angle);
 foreign import ccall "static Imlib2.h imlib_context_set_angle" imlibContextSetAngle :: Double -> IO ()
+contextSetAngle :: Double -> IO ()
 contextSetAngle = imlibContextSetAngle
 
 --void imlib_context_set_color(int red, int green, int blue, int alpha);
 foreign import ccall "static Imlib2.h imlib_context_set_color" imlibContextSetColor :: Int -> Int -> Int -> Int -> IO ()
+contextSetColor :: Int -> Int -> Int -> Int -> IO ()
 contextSetColor = imlibContextSetColor
 
 --void imlib_context_set_color_cmya(int cyan, magenta, int yellow, int alpha);
 foreign import ccall "static Imlib2.h imlib_context_set_color_cmya" imlibContextSetColorCmya :: Int -> Int -> Int -> Int -> IO ()
+contextSetColorCmya :: Int -> Int -> Int -> Int -> IO ()
 contextSetColorCmya = imlibContextSetColorCmya
 
 --void imlib_context_set_color_hsva(float hue, float saturation, float value, int alpha);
@@ -335,6 +345,7 @@
 
 --void imlib_context_set_color_range(Imlib_Color_Range color_range);
 foreign import ccall "static Imlib2.h imlib_context_set_color_range" imlibContextSetColorRange :: ImlibColorRange -> IO ()
+contextSetColorRange :: ImlibColorRange -> IO ()
 contextSetColorRange = imlibContextSetColorRange
 
 --void imlib_context_set_progress_function(Imlib_Progress_Function progress_function);
@@ -345,53 +356,63 @@
 
 --void imlib_context_set_progress_granularity(char progress_granularity);
 foreign import ccall "static Imlib2.h imlib_context_set_progress_granularity" imlibContextSetProgressGranularity :: Word8 -> IO ()
+contextSetProgressGranularity :: Word8 -> IO ()
 contextSetProgressGranularity = imlibContextSetProgressGranularity
 
 --void imlib_context_set_filter(Imlib_Filter filter);
 foreign import ccall "static Imlib2.h imlib_context_set_filter" imlibContextSetFilter :: ImlibFilter -> IO ()
+contextSetFilter :: ImlibFilter -> IO ()
 contextSetFilter = imlibContextSetFilter
 
 -- void imlib_context_set_image(Imlib_Image image);
 foreign import ccall "static Imlib2.h imlib_context_set_image" imlibContextSetImage :: ImlibImage -> IO ()
+contextSetImage :: ImlibImage -> IO ()
 contextSetImage = imlibContextSetImage
 
 -- char imlib_context_get_dither_mask(void);
-foreign import ccall "static Imlib2.h imlib_context_get_dither_mask" imlibContextGetDitherMask :: IO Bool 
+foreign import ccall "static Imlib2.h imlib_context_get_dither_mask" imlibContextGetDitherMask :: IO Bool
+contextGetDitherMask :: IO Bool
 contextGetDitherMask = imlibContextGetDitherMask
 
 -- char imlib_context_get_anti_alias(void);
-foreign import ccall "static Imlib2.h imlib_context_get_anti_alias" imlibContextGetAntiAlias :: IO Bool 
+foreign import ccall "static Imlib2.h imlib_context_get_anti_alias" imlibContextGetAntiAlias :: IO Bool
+contextGetAntiAlias :: IO Bool
 contextGetAntiAlias = imlibContextGetAntiAlias
 
 -- char imlib_context_get_dither(void);
-foreign import ccall "static Imlib2.h imlib_context_get_dither" imlibContextGetDither :: IO Bool 
+foreign import ccall "static Imlib2.h imlib_context_get_dither" imlibContextGetDither :: IO Bool
+contextGetDither :: IO Bool
 contextGetDither = imlibContextGetDither
 
 -- char imlib_context_get_blend(void);
-foreign import ccall "static Imlib2.h imlib_context_get_blend" imlibContextGetBlend :: IO Bool 
+foreign import ccall "static Imlib2.h imlib_context_get_blend" imlibContextGetBlend :: IO Bool
+contextGetBlend :: IO Bool
 contextGetBlend = imlibContextGetBlend
 
 -- Imlib_Color_Modifier imlib_context_get_color_modifier(void);
 foreign import ccall "static Imlib2.h imlib_context_get_color_modifier" imlibContextGetColorModifier :: IO ImlibColorModifier
+contextGetColorModifier :: IO ImlibColorModifier
 contextGetColorModifier = imlibContextGetColorModifier
 
 -- Imlib_Operation imlib_context_get_operation(void);
-foreign import ccall "static Imlib2.h imlib_context_get_operation" imlibContextGetOperation :: IO Int 
-contextGetOperation :: IO ImlibOperation 
+foreign import ccall "static Imlib2.h imlib_context_get_operation" imlibContextGetOperation :: IO Int
+contextGetOperation :: IO ImlibOperation
 contextGetOperation = do
     i <- imlibContextGetOperation
     return (toEnum i)
 
 -- Imlib_Font imlib_context_get_font(void);
 foreign import ccall "static Imlib2.h imlib_context_get_font" imlibContextGetFont :: IO ImlibFont
+contextGetFont :: IO ImlibFont
 contextGetFont = imlibContextGetFont
 
 -- double imlib_context_get_angle(void);
-foreign import ccall "static Imlib2.h imlib_context_get_angle" imlibContextGetAngle :: IO Double 
+foreign import ccall "static Imlib2.h imlib_context_get_angle" imlibContextGetAngle :: IO Double
+contextGetAngle :: IO Double
 contextGetAngle = imlibContextGetAngle
 
 -- Imlib_Text_Direction imlib_context_get_direction(void);
-foreign import ccall "static Imlib2.h imlib_context_get_direction" imlibContextGetDirection :: IO Int 
+foreign import ccall "static Imlib2.h imlib_context_get_direction" imlibContextGetDirection :: IO Int
 contextGetDirection :: IO ImlibTextDirection
 contextGetDirection = do
     d <- imlibContextGetDirection
@@ -405,7 +426,7 @@
     imlibContextGetColor r g b a
     [rr,gg,bb,aa] <- mapM peek [r,g,b,a]
     mapM free [r,g,b,a]
-    return (rr,gg,bb,aa) 
+    return (rr,gg,bb,aa)
 
 -- void imlib_context_get_color_cmya(int *cyan, int *magenta, int *yellow, int *alpha);
 foreign import ccall "static Imlib2.h imlib_context_get_color_cmya" imlibContextGetColorCmya :: Ptr Int -> Ptr Int -> Ptr Int -> Ptr Int -> IO ()
@@ -415,7 +436,7 @@
     imlibContextGetColorCmya c m y a
     [cc,mm,yy,aa] <- mapM peek [c,m,y,a]
     mapM free [c,m,y,a]
-    return (cc,mm,yy,aa) 
+    return (cc,mm,yy,aa)
 
 -- void imlib_context_get_color_hsva(float *hue, float *saturation, float *value, int *alpha);
 foreign import ccall "static Imlib2.h imlib_context_get_color_hsva" imlibContextGetColorHsva :: Ptr Int -> Ptr Int -> Ptr Int -> Ptr Int -> IO ()
@@ -425,7 +446,7 @@
     imlibContextGetColorHsva h s v a
     [hh,ss,vv,aa] <- mapM peek [h,s,v,a]
     mapM free [h,s,v,a]
-    return (hh,ss,vv,aa) 
+    return (hh,ss,vv,aa)
 
 -- void imlib_context_get_color_hlsa(float *hue, float * lightness, float *saturation, int *alpha);
 foreign import ccall "static Imlib2.h imlib_context_get_color_hlsa" imlibContextGetColorHlsa :: Ptr Int -> Ptr Int -> Ptr Int -> Ptr Int -> IO ()
@@ -435,7 +456,7 @@
     imlibContextGetColorHlsa h l s a
     [hh,ll,ss,aa] <- mapM peek [h,l,s,a]
     mapM free [h,l,s,a]
-    return (hh,ll,ss,aa) 
+    return (hh,ll,ss,aa)
 
 -- Imlib_Color *imlib_context_get_imlib_color(void);
 foreign import ccall "static Imlib2.h imlib_context_get_imlib_color" imlibContextGetImlibColor :: IO (Ptr ImlibColor)
@@ -448,54 +469,66 @@
 
 -- Imlib_Color_Range imlib_context_get_color_range(void);
 foreign import ccall "static Imlib2.h imlib_context_get_color_range" imlibContextGetColorRange :: IO ImlibColorRange
+contextGetColorRange :: IO ImlibColorRange
 contextGetColorRange = imlibContextGetColorRange
 
 -- Imlib_Progress_Function imlib_context_get_progress_function(void);
 foreign import ccall "static Imlib2.h imlib_context_get_progress_function" imlibContextGetProgressFunction :: IO (FunPtr ImlibProgressFunction)
-contextGetProgressFunction = imlibContextGetProgressFunction 
-    
+contextGetProgressFunction = imlibContextGetProgressFunction
+
 -- char imlib_context_get_progress_granularity(void);
-foreign import ccall "static Imlib2.h imlib_context_get_progress_granularity" imlibContextGetProgressGranularity :: IO Word8 
+foreign import ccall "static Imlib2.h imlib_context_get_progress_granularity" imlibContextGetProgressGranularity :: IO Word8
+contextGetProgressGranularity :: IO Word8
 contextGetProgressGranularity = imlibContextGetProgressGranularity
 
 -- Imlib_Image imlib_context_get_image(void);
 foreign import ccall "static Imlib2.h imlib_context_get_image" imlibContextGetImage :: IO ImlibImage
+contextGetImage :: IO ImlibImage
 contextGetImage = imlibContextGetImage
 
 -- Imlib_Filter imlib_context_get_filter(void);
 foreign import ccall "static Imlib2.h imlib_context_get_filter" imlibContextGetFilter :: IO ImlibFilter
+contextGetFilter :: IO ImlibFilter
 contextGetFilter = imlibContextGetFilter
 
 -- int imlib_get_cache_size(void);
 foreign import ccall "static Imlib2.h imlib_get_cache_size" imlibGetCacheSize :: IO Int
+getCacheSize :: IO Int
 getCacheSize = imlibGetCacheSize
 
 -- void imlib_set_cache_size(int bytes);
 foreign import ccall "static Imlib2.h imlib_set_cache_size" imlibSetCacheSize :: Int -> IO ()
+setCacheSize :: Int -> IO ()
 setCacheSize = imlibSetCacheSize
 
 -- int imlib_get_color_usage(void);
 foreign import ccall "static Imlib2.h imlib_get_color_usage" imlibGetColorUsage :: IO Int
+getColorUsage :: IO Int
 getColorUsage = imlibGetColorUsage
 
 -- void imlib_set_color_usage(int max);
 foreign import ccall "static Imlib2.h imlib_set_color_usage" imlibSetColorUsage :: Int -> IO ()
+setColorUsage :: Int -> IO ()
 setColorUsage = imlibSetColorUsage
 
 -- void imlib_flush_loaders(void);
 foreign import ccall "static Imlib2.h imlib_flush_loaders" imlibFlushLoaders :: IO ()
+flushLoaders :: IO ()
 flushLoaders = imlibFlushLoaders
 
 -- Imlib_Image imlib_load_image(const char *file);
 foreign import ccall "static Imlib2.h imlib_load_image" imlibLoadImage :: CString -> IO ImlibImage
+loadImage :: String -> IO ImlibImage
 loadImage str = withCString str imlibLoadImage
 
 --Imlib_Image imlib_load_image_immediately(const char *file);
 foreign import ccall "static Imlib2.h imlib_load_image_immediately" imlibLoadImageImmediately :: CString -> IO ImlibImage
+loadImageImmediately :: String -> IO ImlibImage
 loadImageImmediately str = withCString str imlibLoadImageImmediately
 
 --Imlib_Image imlib_load_image_without_cache(const char *file);
 foreign import ccall "static Imlib2.h imlib_load_image_without_cache" imlibLoadImageWithoutCache :: CString -> IO ImlibImage
+loadImageWithoutCache :: String -> IO ImlibImage
 loadImageWithoutCache str = withCString str imlibLoadImageWithoutCache
 
 --Imlib_Image imlib_load_image_immediately_without_cache(const char *file);
@@ -514,36 +547,44 @@
 
 --void imlib_free_image(void);
 foreign import ccall "static Imlib2.h imlib_free_image" imlibFreeImage :: IO ()
+freeImage :: IO ()
 freeImage = imlibFreeImage
 
 --void imlib_free_image_and_decache(void);
 foreign import ccall "static Imlib2.h imlib_free_image_and_decache" imlibFreeImageAndDecache :: IO ()
+freeImageAndDecache :: IO ()
 freeImageAndDecache = imlibFreeImageAndDecache
 
 --int imlib_image_get_width(void);
 foreign import ccall "static Imlib2.h imlib_image_get_width" imlibImageGetWidth :: IO Int
+imageGetWidth :: IO Int
 imageGetWidth = imlibImageGetWidth
 
 --int imlib_image_get_height(void);
 foreign import ccall "static Imlib2.h imlib_image_get_height" imlibImageGetHeight :: IO Int
+imageGetHeight :: IO Int
 imageGetHeight = imlibImageGetHeight
 
 --const char *imlib_image_get_filename(void);
 foreign import ccall "static Imlib2.h imlib_image_get_filename" imlibImageGetFilename :: IO CString
+imageGetFilename :: IO String
 imageGetFilename = do
     b <- imlibImageGetFilename
     peekCString b
 
 --DATA32 *imlib_image_get_data(void);
 foreign import ccall "static Imlib2.h imlib_image_get_data" imlibImageGetData :: IO (Ptr Word32)
+imageGetData :: IO (Ptr Word32)
 imageGetData = imlibImageGetData
 
 --DATA32 *imlib_image_get_data_for_reading_only(void);
 foreign import ccall "static Imlib2.h imlib_image_get_data_for_reading_only" imlibImageGetDataForReadingOnly :: IO (Ptr Word32)
+imageGetDataForReadingOnly :: IO (Ptr Word32)
 imageGetDataForReadingOnly = imlibImageGetDataForReadingOnly
 
 --void imlib_image_put_back_data(DATA32 *data);
 foreign import ccall "static Imlib2.h imlib_image_put_back_data" imlibImagePutBackData :: Ptr Word32 -> IO ()
+imagePutBackData :: Ptr Word32 -> IO ()
 imagePutBackData = imlibImagePutBackData
 
 -- Convenience "control structure" for working with getting and putting image data back, since you must always return the data that you get.
@@ -580,10 +621,12 @@
 
 --char imlib_image_has_alpha(void);
 foreign import ccall "static Imlib2.h imlib_image_has_alpha" imlibImageHasAlpha :: IO Bool
+imageHasAlpha :: IO Bool
 imageHasAlpha = imlibImageHasAlpha
 
 --void imlib_image_set_changes_on_disk(void);
 foreign import ccall "static Imlib2.h imlib_image_set_changes_on_disk" imlibImageSetChangesOnDisk :: IO ()
+imageSetChangesOnDisk :: IO ()
 imageSetChangesOnDisk = imlibImageSetChangesOnDisk
 
 --void imlib_image_get_border(Imlib_Border *border);
@@ -595,7 +638,7 @@
     bb <- peek b
     free b
     return bb
-    
+
 --void imlib_image_set_border(Imlib_Border *border);
 foreign import ccall "static Imlib2.h imlib_image_set_border" imlibImageSetBorder :: Ptr ImlibBorder -> IO ()
 imageSetBorder :: ImlibBorder -> IO ()
@@ -607,18 +650,22 @@
 
 --void imlib_image_set_format(const char *format);
 foreign import ccall "static Imlib2.h imlib_image_set_format" imlibImageSetFormat :: CString -> IO ()
+imageSetFormat :: String -> IO ()
 imageSetFormat str = withCString str imlibImageSetFormat
 
 --void imlib_image_set_irrelevant_format(char irrelevant);
 foreign import ccall "static Imlib2.h imlib_image_set_irrelevant_format" imlibImageSetIrrelevantFormat :: Bool -> IO ()
+imageSetIrrelevantFormat :: Bool -> IO ()
 imageSetIrrelevantFormat = imlibImageSetIrrelevantFormat
 
 --void imlib_image_set_irrelevant_border(char irrelevant);
 foreign import ccall "static Imlib2.h imlib_image_set_irrelevant_border" imlibImageSetIrrelevantBorder :: Bool -> IO ()
+imageSetIrrelevantBorder :: Bool -> IO ()
 imageSetIrrelevantBorder = imlibImageSetIrrelevantBorder
 
 --void imlib_image_set_irrelevant_alpha(char irrelevant);
 foreign import ccall "static Imlib2.h imlib_image_set_irrelevant_alpha" imlibImageSetIrrelevantAlpha :: Bool -> IO ()
+imageSetIrrelevantAlpha :: Bool -> IO ()
 imageSetIrrelevantAlpha = imlibImageSetIrrelevantAlpha
 
 --char *imlib_image_format(void);
@@ -628,11 +675,12 @@
 
 --void imlib_image_set_has_alpha(char has_alpha);
 foreign import ccall "static Imlib2.h imlib_image_set_has_alpha" imlibImageSetHasAlpha :: Bool -> IO ()
+imageSetHasAlpha :: Bool -> IO ()
 imageSetHasAlpha = imlibImageSetHasAlpha
 
 
 --void imlib_blend_image_onto_image(Imlib_Image source_image, char merge_alpha, int source_x, int source_y, int source_width, int source_height, int destination_x, int destination_y, int destination_width, int destination_height);
-foreign import ccall "static Imlib2.h imlib_blend_image_onto_image" imlibBlendImageOntoImage 
+foreign import ccall "static Imlib2.h imlib_blend_image_onto_image" imlibBlendImageOntoImage
     :: ImlibImage
     -> Bool  -- merge alpha
     -> Int   -- source x
@@ -648,10 +696,12 @@
 
 --Imlib_Image imlib_create_image(int width, int height);
 foreign import ccall "static Imlib2.h imlib_create_image" imlibCreateImage :: Int -> Int -> IO ImlibImage
+createImage :: Int -> Int -> IO ImlibImage
 createImage = imlibCreateImage
 
 --Imlib_Image imlib_create_image_using_data(int width, int height, DATA32 *data);
 foreign import ccall "static Imlib2.h imlib_create_image_using_data" imlibCreateImageUsingData :: Int -> Int -> Ptr Word32 -> IO ImlibImage
+createImageUsingData :: Int -> Int -> Ptr Word32 -> IO ImlibImage
 createImageUsingData = imlibCreateImageUsingData
 
 --Imlib_Image imlib_create_image_using_copied_data(int width, int height, DATA32 *data);
@@ -667,6 +717,7 @@
 
 --Imlib_Image imlib_clone_image(void);
 foreign import ccall "static Imlib2.h imlib_clone_image" imlibCloneImage :: IO ImlibImage
+cloneImage :: IO ImlibImage
 cloneImage = imlibCloneImage
 
 --Imlib_Image imlib_create_cropped_image(int x, int y, int width, int height);
@@ -679,6 +730,7 @@
 
 --Imlib_Updates imlib_updates_clone(Imlib_Updates updates);
 foreign import ccall "static Imlib2.h imlib_updates_clone" imlibUpdatesClone :: ImlibUpdates -> IO ImlibUpdates
+updatesClone :: ImlibUpdates -> IO ImlibUpdates
 updatesClone = imlibUpdatesClone
 
 --Imlib_Updates imlib_update_append_rect(Imlib_Updates updates, int x, int y, int w, int h);
@@ -695,10 +747,12 @@
 
 --void imlib_updates_free(Imlib_Updates updates);
 foreign import ccall "static Imlib2.h imlib_updates_free" imlibUpdatesFree :: ImlibUpdates -> IO ()
+updatesFree :: ImlibUpdates -> IO ()
 updatesFree = imlibUpdatesFree
 
 --Imlib_Updates imlib_updates_get_next(Imlib_Updates updates);
 foreign import ccall "static Imlib2.h imlib_updates_get_next" imlibUpdatesGetNext :: ImlibUpdates -> IO ImlibUpdates
+updatesGetNext :: ImlibUpdates -> IO ImlibUpdates
 updatesGetNext = imlibUpdatesGetNext
 
 --void imlib_updates_get_coordinates(Imlib_Updates updates, int *x_return, int *y_return, int *width_return, int *height_return);
@@ -709,7 +763,7 @@
     imlibUpdatesGetCoordinates u x y w h
     [xx,yy,ww,hh] <- mapM peek [x,y,w,h]
     mapM free [x,y,w,h]
-    return (xx,yy,ww,hh) 
+    return (xx,yy,ww,hh)
 
 --void imlib_updates_set_coordinates(Imlib_Updates updates, int x, int y, int width, int height);
 foreign import ccall "static Imlib2.h imlib_updates_set_coordinates" imlibUpdatesSetCoordinates :: ImlibUpdates -> Int -> Int -> Int -> Int -> IO ()
@@ -717,6 +771,7 @@
 
 --Imlib_Updates imlib_updates_init(void);
 foreign import ccall "static Imlib2.h imlib_updates_init" imlibUpdatesInit :: IO ImlibUpdates
+updatesInit :: IO ImlibUpdates
 updatesInit = imlibUpdatesInit
 
 --Imlib_Updates imlib_updates_append_updates(Imlib_Updates updates, Imlib_Updates appended_updates);
@@ -725,51 +780,63 @@
 
 --void imlib_image_flip_horizontal(void);
 foreign import ccall "static Imlib2.h imlib_image_flip_horizontal" imlibImageFlipHorizontal :: IO ()
+imageFlipHorizontal :: IO ()
 imageFlipHorizontal = imlibImageFlipHorizontal
 
 --void imlib_image_flip_vertical(void);
 foreign import ccall "static Imlib2.h imlib_image_flip_vertical" imlibImageFlipVertical :: IO ()
+imageFlipVertical :: IO ()
 imageFlipVertical = imlibImageFlipVertical
 
 --void imlib_image_flip_diagonal(void);
 foreign import ccall "static Imlib2.h imlib_image_flip_diagonal" imlibImageFlipDiagonal :: IO ()
+imageFlipDiagonal :: IO ()
 imageFlipDiagonal = imlibImageFlipDiagonal
 
 --void imlib_image_orientate(int orientation);
 foreign import ccall "static Imlib2.h imlib_image_orientate" imlibImageOrientate :: Int -> IO ()
+imageOrientate :: Int -> IO ()
 imageOrientate = imlibImageOrientate
 
 --void imlib_image_blur(int radius);
 foreign import ccall "static Imlib2.h imlib_image_blur" imlibImageBlur :: Int -> IO ()
+imageBlur :: Int -> IO ()
 imageBlur = imlibImageBlur
 
 --void imlib_image_sharpen(int radius);
 foreign import ccall "static Imlib2.h imlib_image_sharpen" imlibImageSharpen :: Int -> IO ()
+imageSharpen :: Int -> IO ()
 imageSharpen = imlibImageSharpen
 
 --void imlib_image_tile_horizontal(void);
 foreign import ccall "static Imlib2.h imlib_image_tile_horizontal" imlibImageTileHorizontal :: IO ()
+imageTileHorizontal :: IO ()
 imageTileHorizontal = imlibImageTileHorizontal
 
 --void imlib_image_tile_vertical(void);
 foreign import ccall "static Imlib2.h imlib_image_tile_vertical" imlibImageTileVertical :: IO ()
+imageTileVertical :: IO ()
 imageTileVertical = imlibImageTileVertical
 
 --void imlib_image_tile(void);
 foreign import ccall "static Imlib2.h imlib_image_tile" imlibImageTile :: IO ()
+imageTile :: IO ()
 imageTile = imlibImageTile
 
 --Imlib_Font imlib_load_font(const char *font_name);
 foreign import ccall "static Imlib2.h imlib_load_font" imlibLoadFont :: CString -> IO ImlibFont
+loadFont :: String -> IO ImlibFont
 loadFont str = withCString str imlibLoadFont
 
 --void imlib_free_font(void);
 foreign import ccall "static Imlib2.h imlib_free_font" imlibFreeFont :: IO ()
-freeFont str = imlibFreeFont
+freeFont :: forall t. t -> IO ()
+freeFont _ = imlibFreeFont
 
 
 --void imlib_text_draw(int x, int y, const char *text);
 foreign import ccall "static Imlib2.h imlib_text_draw" imlibTextDraw :: Int -> Int -> CString -> IO ()
+textDraw :: Int -> Int -> String -> IO ()
 textDraw x y str = withCString str (imlibTextDraw x y)
 
 --void imlib_text_draw_with_return_metrics(int x, int y, const char *text, int *width_return, int *height_return, int *horizontal_advance_return, int *vertical_advance_return);
@@ -779,48 +846,54 @@
     withCString str (\s -> imlibTextDrawWithReturnMetrics x y s w h ah av)
     [rw,rh,rah,rav] <- mapM peek [w,h,ah,av]
     mapM free [w,h,ah,av]
-    return (rw,rh,rah,rav) 
+    return (rw,rh,rah,rav)
 
 --void imlib_get_text_size(const char *text, int *width_return, int *height_return);
 foreign import ccall "static Imlib2.h imlib_get_text_size" imlibGetTextSize :: CString -> Ptr Int -> Ptr Int -> IO ()
+getTextSize :: String -> IO (Int, Int)
 getTextSize str = do
     [w,h] <- nmalloc 4
     withCString str (\s -> imlibGetTextSize s w h)
     [rw,rh] <- mapM peek [w,h]
     mapM free [w,h]
-    return (rw,rh) 
+    return (rw,rh)
 
 --void imlib_get_text_advance(const char *text, int *horizontal_advance_return, int *vertical_advance_return);
 foreign import ccall "static Imlib2.h imlib_get_text_advance" imlibGetTextAdvance :: CString -> Ptr Int -> Ptr Int -> IO ()
+getTextAdvance :: String -> IO (Int, Int)
 getTextAdvance str = do
     [h,v] <- nmalloc 4
     withCString str (\s -> imlibGetTextAdvance s h v)
     [rh,rv] <- mapM peek [h,v]
     mapM free [h,v]
-    return (rh,rv) 
+    return (rh,rv)
 
 --int imlib_get_text_inset(const char *text);
 foreign import ccall "static Imlib2.h imlib_get_text_inset" imlibGetTextInset :: CString -> IO Int
+getTextInset :: String -> IO Int
 getTextInset str = withCString str imlibGetTextInset
 
 --void imlib_add_path_to_font_path(const char *path);
 foreign import ccall "static Imlib2.h imlib_add_path_to_font_path" imlibAddPathToFontPath :: CString -> IO ()
+addPathToFontPath :: String -> IO ()
 addPathToFontPath str = withCString str imlibAddPathToFontPath
 
 --void imlib_remove_path_from_font_path(const char *path);
 foreign import ccall "static Imlib2.h imlib_remove_path_from_font_path" imlibRemovePathFromFontPath :: CString -> IO ()
+removePathFromFontPath :: String -> IO ()
 removePathFromFontPath str = withCString str imlibRemovePathFromFontPath
 
 --char **imlib_list_font_path(int *number_return);
 foreign import ccall "static Imlib2.h imlib_list_font_path" imlibListFontPath :: Ptr Int -> IO (Ptr CString)
+listFontPath :: IO [String]
 listFontPath = do
     pn <- malloc
     pxs <- imlibListFontPath pn
     n <- peek pn
     free pn
     xs <- peekArray n pxs
-    xs <- mapM peekCString xs
-    return xs
+    ys <- mapM peekCString xs
+    return ys
 
 --int imlib_text_get_index_and_location(const char *text, int x, int y, int *char_x_return, int *char_y_return, int *char_width_return, int *char_height_return);
 foreign import ccall "static Imlib2.h imlib_text_get_index_and_location" imlibTextGetIndexAndLocation :: CString -> Int -> Int -> Ptr Int -> Ptr Int -> Ptr Int -> Ptr Int -> IO Int
@@ -829,7 +902,7 @@
     n <- withCString str (\s -> imlibTextGetIndexAndLocation s x y xp yp wp hp)
     [xr,yr,wr,hr] <- mapM peek [xp,yp,wp,hp]
     mapM free [xp,yp,wp,hp]
-    return (n,xr,yr,wr,hr) 
+    return (n,xr,yr,wr,hr)
 
 
 --void imlib_text_get_location_at_index(const char *text, int index, int *char_x_return, int *char_y_return, int *char_width_return, int *char_height_return);
@@ -839,68 +912,81 @@
     withCString str (\s -> imlibTextGetLocationAtIndex s k xp yp wp hp)
     [xr,yr,wr,hr] <- mapM peek [xp,yp,wp,hp]
     mapM free [xp,yp,wp,hp]
-    return (xr,yr,wr,hr) 
+    return (xr,yr,wr,hr)
 
 --char **imlib_list_fonts(int *number_return);
 --void imlib_free_font_list(char **font_list, int number);
 foreign import ccall "static Imlib2.h imlib_list_fonts" imlibListFonts :: Ptr Int -> IO (Ptr CString)
 foreign import ccall "static Imlib2.h imlib_free_font_list" imlibFreeFontList :: Ptr (CString) -> Int -> IO ()
+listFonts :: IO [String]
 listFonts = do
     pn <- malloc
     pxs <- imlibListFonts pn
     n <- peek pn
     free pn
     xs <- peekArray n pxs
-    xs <- mapM peekCString xs
+    ys <- mapM peekCString xs
     imlibFreeFontList pxs n
-    return xs
+    return ys
 
 --int imlib_get_font_cache_size(void);
 foreign import ccall "static Imlib2.h imlib_get_font_cache_size" imlibGetFontCacheSize :: IO Int
+getFontCacheSize :: IO Int
 getFontCacheSize = imlibGetFontCacheSize
 
 --void imlib_set_font_cache_size(int bytes);
 foreign import ccall "static Imlib2.h imlib_set_font_cache_size" imlibSetFontCacheSize :: Int -> IO ()
+setFontCacheSize :: Int -> IO ()
 setFontCacheSize = imlibSetFontCacheSize
 
 --void imlib_flush_font_cache(void);
 foreign import ccall "static Imlib2.h imlib_flush_font_cache" imlibFlushFontCache :: IO ()
+flushFontCache :: IO ()
 flushFontCache = imlibFlushFontCache
 
 --int imlib_get_font_ascent(void);
 foreign import ccall "static Imlib2.h imlib_get_font_ascent" imlibGetFontAscent :: IO Int
+getFontAscent :: IO Int
 getFontAscent = imlibGetFontAscent
 
 --int imlib_get_font_descent(void);
 foreign import ccall "static Imlib2.h imlib_get_font_descent" imlibGetFontDescent :: IO Int
+getFontDescent :: IO Int
 getFontDescent = imlibGetFontDescent
 
 --int imlib_get_maximum_font_ascent(void);
 foreign import ccall "static Imlib2.h imlib_get_maximum_font_ascent" imlibGetMaximumFontAscent :: IO Int
+getMaximumFontAscent :: IO Int
 getMaximumFontAscent = imlibGetMaximumFontAscent
 
 --int imlib_get_maximum_font_descent(void);
 foreign import ccall "static Imlib2.h imlib_get_maximum_font_descent" imlibGetMaximumFontDescent :: IO Int
+getMaximumFontDescent :: IO Int
 getMaximumFontDescent = imlibGetMaximumFontDescent
 
 --Imlib_Color_Modifier imlib_create_color_modifier(void);
 foreign import ccall "static Imlib2.h imlib_create_color_modifier" imlibCreateColorModifier :: IO ImlibColorModifier
+createColorModifier :: IO ImlibColorModifier
 createColorModifier = imlibCreateColorModifier
 
 --void imlib_free_color_modifier(void);
 foreign import ccall "static Imlib2.h imlib_free_color_modifier" imlibFreeColorModifier :: IO ()
+freeColorModifier :: IO ()
 freeColorModifier = imlibFreeColorModifier
 
 --void imlib_modify_color_modifier_gamma(double gamma_value);
 foreign import ccall "static Imlib2.h imlib_modify_color_modifier_gamma" imlibModifyColorModifierGamma :: Double -> IO ()
+modifyColorModifierGamma :: Double -> IO ()
 modifyColorModifierGamma = imlibModifyColorModifierGamma
 
 --void imlib_modify_color_modifier_brightness(double brightness_value);
 foreign import ccall "static Imlib2.h imlib_modify_color_modifier_brightness" imlibModifyColorModifierBrightness :: Double -> IO ()
+modifyColorModifierBrightness :: Double -> IO ()
 modifyColorModifierBrightness = imlibModifyColorModifierBrightness
 
 --void imlib_modify_color_modifier_contrast(double contrast_value);
 foreign import ccall "static Imlib2.h imlib_modify_color_modifier_contrast" imlibModifyColorModifierContrast :: Double -> IO ()
+modifyColorModifierContrast :: Double -> IO ()
 modifyColorModifierContrast = imlibModifyColorModifierContrast
 
 --void imlib_set_color_modifier_tables(DATA8 *red_table, DATA8 *green_table, DATA8 *blue_table, DATA8 *alpha_table);
@@ -911,9 +997,9 @@
             withArray bs (\ba ->
                 withArray as (\aa -> imlibSetColorModifierTables ra ga ba aa))))
     where
-        padLeft n a xs | l >  n = take n xs
-                       | l <  n = (replicate (n-l) a) ++ xs
-                       | l == n = xs
+        padLeft n b xs | l >  n = take n xs
+                       | l <  n = (replicate (n-l) b) ++ xs
+                       | otherwise = xs -- l == n
             where l = length xs
         rs = padLeft 256 0 r
         gs = padLeft 256 0 g
@@ -931,10 +1017,12 @@
 
 --void imlib_reset_color_modifier(void);
 foreign import ccall "static Imlib2.h imlib_reset_color_modifier" imlibResetColorModifier :: IO ()
+resetColorModifier :: IO ()
 resetColorModifier = imlibResetColorModifier
 
 --void imlib_apply_color_modifier(void);
 foreign import ccall "static Imlib2.h imlib_apply_color_modifier" imlibApplyColorModifier :: IO ()
+applyColorModifier :: IO ()
 applyColorModifier = imlibApplyColorModifier
 
 --void imlib_apply_color_modifier_to_rectangle(int x, int y, int width, int height);
@@ -971,14 +1059,17 @@
 
 --Imlib_Color_Range imlib_create_color_range(void);
 foreign import ccall "static Imlib2.h imlib_create_color_range" imlibCreateColorRange :: IO ImlibColorRange
+createColorRange :: IO ImlibColorRange
 createColorRange = imlibCreateColorRange
 
 --void imlib_free_color_range(void);
 foreign import ccall "static Imlib2.h imlib_free_color_range" imlibFreeColorRange :: IO ()
+freeColorRange :: IO ()
 freeColorRange = imlibFreeColorRange
 
 --void imlib_add_color_to_color_range(int distance_away);
 foreign import ccall "static Imlib2.h imlib_add_color_to_color_range" imlibAddColorToColorRange :: Int -> IO ()
+addColorToColorRange :: Int -> IO ()
 addColorToColorRange = imlibAddColorToColorRange
 
 --void imlib_image_fill_color_range_rectangle(int x, int y, int width, int height, double angle);
@@ -991,6 +1082,7 @@
 
 --void imlib_image_query_pixel(int x, int y, Imlib_Color *color_return);
 foreign import ccall "static Imlib2.h imlib_image_query_pixel" imlibImageQueryPixel :: Int -> Int -> Ptr ImlibColor -> IO ()
+imageQueryPixel :: Int -> Int -> IO ImlibColor
 imageQueryPixel x y = do
     c <- malloc
     imlibImageQueryPixel x y c
@@ -1006,17 +1098,17 @@
     imlibImageQueryPixelCmya cx cy c m y a
     [cc,mm,yy,aa] <- mapM peek [c,m,y,a]
     mapM free [c,m,y,a]
-    return (cc,mm,yy,aa) 
+    return (cc,mm,yy,aa)
 
 --void imlib_image_query_pixel_hsva(int x, int y, float *hue, float *saturation, float *value, int *alpha);
 foreign import ccall "static Imlib2.h imlib_image_query_pixel_hsva" imlibImageQueryPixelHsva :: Int -> Int -> Ptr Int -> Ptr Int -> Ptr Int -> Ptr Int -> IO ()
 imageQueryPixelHsva :: Int -> Int -> IO (Int, Int, Int, Int)
 imageQueryPixelHsva cx cy = do
     [h,s,v,a] <- nmalloc 4
-    imlibImageQueryPixelCmya cx cy h s v a
+    imlibImageQueryPixelHsva cx cy h s v a
     [hh,ss,vv,aa] <- mapM peek [h,s,v,a]
     mapM free [h,s,v,a]
-    return (hh,ss,vv,aa) 
+    return (hh,ss,vv,aa)
 
 --void imlib_image_query_pixel_hlsa(int x, int y, float *hue, float *lightness, float *saturation, int *alpha);
 foreign import ccall "static Imlib2.h imlib_image_query_pixel_hlsa" imlibImageQueryPixelHlsa :: Int -> Int -> Ptr Int -> Ptr Int -> Ptr Int -> Ptr Int -> IO ()
@@ -1026,32 +1118,36 @@
     imlibImageQueryPixelHlsa cx cy h l s a
     [hh,ll,ss,aa] <- mapM peek [h,l,s,a]
     mapM free [h,l,s,a]
-    return (hh,ll,ss,aa) 
+    return (hh,ll,ss,aa)
 
 --void imlib_image_attach_data_value(const char *key, void *data, int value, Imlib_Data_Destructor_Function destructor_function);
-foreign import ccall "static Imlib2.h imlib_image_attach_data_value" imlibImageAttachDataValue :: CString -> Ptr () -> Int -> FunPtr ImlibDataDestructorFunction -> IO () 
+foreign import ccall "static Imlib2.h imlib_image_attach_data_value" imlibImageAttachDataValue :: CString -> Ptr () -> Int -> FunPtr ImlibDataDestructorFunction -> IO ()
 imageAttachDataValue key d v dest = do
     df <- mkDestructorFunction dest
     withCString key (\k -> imlibImageAttachDataValue k d v df)
 
 --void *imlib_image_get_attached_data(const char *key);
-foreign import ccall "static Imlib2.h imlib_image_get_attached_data" imlibImageGetAttachedData :: CString -> IO (Ptr ()) 
+foreign import ccall "static Imlib2.h imlib_image_get_attached_data" imlibImageGetAttachedData :: CString -> IO (Ptr ())
+imageGetAttachedData :: String -> IO (Ptr ())
 imageGetAttachedData key = withCString key imlibImageGetAttachedData
 
 --int imlib_image_get_attached_value(const char *key);
-foreign import ccall "static Imlib2.h imlib_image_get_attached_value" imlibImageGetAttachedValue :: CString -> IO Int 
+foreign import ccall "static Imlib2.h imlib_image_get_attached_value" imlibImageGetAttachedValue :: CString -> IO Int
+imageGetAttachedValue :: String -> IO Int
 imageGetAttachedValue key = withCString key imlibImageGetAttachedValue
 
 --void imlib_image_remove_attached_data_value(const char *key);
-foreign import ccall "static Imlib2.h imlib_image_remove_attached_data_value" imlibImageRemoveAttachedDataValue :: CString -> IO () 
+foreign import ccall "static Imlib2.h imlib_image_remove_attached_data_value" imlibImageRemoveAttachedDataValue :: CString -> IO ()
+imageRemoveAttachedDataValue :: String -> IO ()
 imageRemoveAttachedDataValue key = withCString key imlibImageRemoveAttachedDataValue
 
 --void imlib_image_remove_and_free_attached_data_value(const char *key);
-foreign import ccall "static Imlib2.h imlib_image_remove_and_free_attached_data_value" imlibImageRemoveAndFreeAttachedDataValue :: CString -> IO () 
+foreign import ccall "static Imlib2.h imlib_image_remove_and_free_attached_data_value" imlibImageRemoveAndFreeAttachedDataValue :: CString -> IO ()
 imageRemoveAndFreeAttachedDataValue key = withCString key imlibImageRemoveAndFreeAttachedDataValue
 
 --void imlib_save_image(const char *filename);
 foreign import ccall "static Imlib2.h imlib_save_image" imlibSaveImage :: CString -> IO ()
+saveImage :: String -> IO ()
 saveImage str = withCString str imlibSaveImage
 
 --void imlib_save_image_with_error_return(const char *filename, Imlib_Load_Error *error_return);
@@ -1059,13 +1155,14 @@
 saveImageWithErrorReturn :: String -> IO ImlibLoadError
 saveImageWithErrorReturn str = do
     pe <- malloc
-    im <- withCString str (\s -> imlibSaveImageWithErrorReturn s pe)
+    im <- withCString str (\s -> imlibSaveImageWithErrorReturn s pe) -- Unused?
     e <- peek pe
     free pe
-    return (toEnum e) 
+    return (toEnum e)
 
 --Imlib_Image imlib_create_rotated_image(double angle);
 foreign import ccall "static Imlib2.h imlib_create_rotated_image" imlibCreateRotatedImage :: Double -> IO ImlibImage
+createRotatedImage :: Double -> IO ImlibImage
 createRotatedImage = imlibCreateRotatedImage
 
 --void imlib_blend_image_onto_image_at_angle(Imlib_Image source_image, char merge_alpha, int source_x, int source_y, int source_width, int source_height, int destination_x, int destination_y, int angle_x, int angle_y);
@@ -1115,10 +1212,12 @@
 
 --void imlib_polygon_new(void);
 foreign import ccall "static Imlib2.h imlib_polygon_new" imlibPolygonNew :: IO ()
+polygonNew :: IO ()
 polygonNew = imlibPolygonNew
 
 --void imlib_polygon_free(ImlibPolygon poly);
 foreign import ccall "static Imlib2.h imlib_polygon_free" imlibPolygonFree :: ImlibPolygon -> IO ()
+polygonFree :: ImlibPolygon -> IO ()
 polygonFree = imlibPolygonFree
 
 --void imlib_polygon_add_point(ImlibPolygon poly, int x, int y);
@@ -1127,10 +1226,12 @@
 
 --void imlib_image_draw_polygon(ImlibPolygon poly, unsigned char closed);
 foreign import ccall "static Imlib2.h imlib_image_draw_polygon" imlibImageDrawPolygon :: ImlibPolygon -> Bool -> IO ()
+imageDrawPolygon :: ImlibPolygon -> Bool -> IO ()
 imageDrawPolygon = imlibImageDrawPolygon
 
 --void imlib_image_fill_polygon(ImlibPolygon poly);
 foreign import ccall "static Imlib2.h imlib_image_fill_polygon" imlibImageFillPolygon :: ImlibPolygon -> IO ()
+imageFillPolygon :: ImlibPolygon -> IO ()
 imageFillPolygon = imlibImageFillPolygon
 
 --void imlib_polygon_get_bounds(ImlibPolygon poly, int *px1, int *py1, int *px2, int *py2);
@@ -1156,14 +1257,17 @@
 
 --void imlib_image_filter(void);
 foreign import ccall "static Imlib2.h imlib_image_filter" imlibImageFilter :: IO ()
+imageFilter :: IO ()
 imageFilter = imlibImageFilter
 
 --Imlib_Filter imlib_create_filter(int initsize);
 foreign import ccall "static Imlib2.h imlib_create_filter" imlibCreateFilter :: Int -> IO ImlibFilter
+createFilter :: Int -> IO ImlibFilter
 createFilter = imlibCreateFilter
 
 --void imlib_free_filter(void);
 foreign import ccall "static Imlib2.h imlib_free_filter" imlibFreeFilter :: IO ()
+freeFilter :: IO ()
 freeFilter = imlibFreeFilter
 
 --void imlib_filter_set(int xoff, int yoff, int a, int r, int g, int b);
@@ -1180,7 +1284,7 @@
 
 --void imlib_filter_set_green(int xoff, int yoff, int a, int r, int g, int b);
 foreign import ccall "static Imlib2.h imlib_filter_set_green" imlibFilterSetGreen :: Int -> Int -> Int -> Int -> Int -> Int -> IO ()
-filterSetGreen = imlibFilterSetGreen  
+filterSetGreen = imlibFilterSetGreen
 
 --void imlib_filter_set_blue(int xoff, int yoff, int a, int r, int g, int b);
 foreign import ccall "static Imlib2.h imlib_filter_set_blue" imlibFilterSetBlue :: Int -> Int -> Int -> Int -> Int -> Int -> IO ()
@@ -1188,10 +1292,12 @@
 
 --void imlib_filter_constants(int a, int r, int g, int b);
 foreign import ccall "static Imlib2.h imlib_filter_constants" imlibFilterConstants :: Int -> Int -> Int -> Int -> IO ()
+filterConstants :: Int -> Int -> Int -> Int -> IO ()
 filterConstants = imlibFilterConstants
 
 --void imlib_filter_divisors(int a, int r, int g, int b);
 foreign import ccall "static Imlib2.h imlib_filter_divisors" imlibFilterDivisors :: Int -> Int -> Int -> Int -> IO ()
+filterDivisors :: Int -> Int -> Int -> Int -> IO ()
 filterDivisors = imlibFilterDivisors
 
 
diff --git a/Imlib.cabal b/Imlib.cabal
--- a/Imlib.cabal
+++ b/Imlib.cabal
@@ -1,13 +1,15 @@
 Name:                Imlib
-Version:             0.1
+Version:             0.1.1
 Description:         Haskell binding for Imlib 2
 Category:            Graphics
 License:             BSD3
 License-file:        LICENSE
 Author:              Cale Gibbard
 Maintainer:          cgibbard@gmail.com
-Build-Depends:       base
+Build-Depends:       base, array, X11
+Build-Type:          Simple
 Exposed-Modules:     Graphics.Imlib
 Extra-Libraries:     Imlib2
 Extra-Source-Files:  examples/value2alpha.hs examples/circle-inversion.hs
-ghc-options:         -O2
+ghc-options:         -O2 -optl-Wl,-s
+ghc-prof-options:    -prof -auto-all
