diff --git a/Graphics/UI/SDL/Events.hsc b/Graphics/UI/SDL/Events.hsc
--- a/Graphics/UI/SDL/Events.hsc
+++ b/Graphics/UI/SDL/Events.hsc
@@ -45,7 +45,7 @@
 import Foreign (Int16, Word8, Word16, Word32, Ptr,
                Storable(poke, sizeOf, alignment, peekByteOff, pokeByteOff, peek),
                unsafePerformIO, toBool, new, alloca)
-import Foreign.C (peekCString, CString)
+import Foreign.C (peekCString, CString, CInt)
 import Data.Bits (Bits((.&.), shiftL))
 import Control.Concurrent (threadDelay)
 import Prelude hiding (Enum(..))
@@ -55,7 +55,7 @@
 import Data.Typeable (Typeable(typeOf),TypeRep)
 
 import Graphics.UI.SDL.Keysym (SDLKey, Modifier, Keysym)
-import Graphics.UI.SDL.Utilities (Enum(..), intToBool, toBitmask, fromBitmask)
+import Graphics.UI.SDL.Utilities (Enum(..), intToBool, toBitmask, fromBitmask, fromCInt)
 import Graphics.UI.SDL.General (unwrapBool, failWithError)
 import Graphics.UI.SDL.Video (Toggle(..), fromToggle)
 
@@ -326,14 +326,14 @@
 peekResize ptr
     = do w <- #{peek SDL_ResizeEvent, w} ptr
          h <- #{peek SDL_ResizeEvent, h} ptr
-         return $! VideoResize w h
+         return $! VideoResize (fromCInt w) (fromCInt h)
 
 peekUserEvent :: Ptr Event -> Word8 -> IO Event
 peekUserEvent ptr n
     = do code <- #{peek SDL_UserEvent, code} ptr
          data1 <- #{peek SDL_UserEvent, data1} ptr
          data2 <- #{peek SDL_UserEvent, data2} ptr
-         return $ User (fromEventType n) code data1 data2
+         return $ User (fromEventType n) (fromCInt code) data1 data2
 
 getEventType :: Event -> Word8
 getEventType = fromSDLEvent . eventToSDLEvent
@@ -519,8 +519,8 @@
                   
 
 -- Uint8 SDL_GetMouseState(int *x, int *y);
-foreign import ccall "SDL_GetMouseState" sdlGetMouseState :: Ptr Int -> Ptr Int -> IO Word8
-foreign import ccall "SDL_GetRelativeMouseState" sdlGetRelativeMouseState :: Ptr Int -> Ptr Int -> IO Word8
+foreign import ccall "SDL_GetMouseState" sdlGetMouseState :: Ptr CInt -> Ptr CInt -> IO Word8
+foreign import ccall "SDL_GetRelativeMouseState" sdlGetRelativeMouseState :: Ptr CInt -> Ptr CInt -> IO Word8
 
 -- | Retrieves the current state of the mouse. Returns (X position, Y position, pressed buttons).
 getMouseState :: IO (Int, Int, [MouseButton])
@@ -531,17 +531,18 @@
 getRelativeMouseState :: IO (Int, Int, [MouseButton])
 getRelativeMouseState = mouseStateGetter sdlGetRelativeMouseState
 
-mouseStateGetter :: (Ptr Int -> Ptr Int -> IO Word8) -> IO  (Int, Int, [MouseButton])
+mouseStateGetter :: (Ptr CInt -> Ptr CInt -> IO Word8) -> IO  (Int, Int, [MouseButton])
 mouseStateGetter getter
     = alloca $ \xPtr ->
       alloca $ \yPtr ->
       do ret <- getter xPtr yPtr
          [x,y] <- mapM peek [xPtr,yPtr]
-         return (x,y,filter (mousePressed ret) [ButtonLeft
-                                               ,ButtonMiddle
-                                               ,ButtonRight
-                                               ,ButtonWheelUp
-                                               ,ButtonWheelDown])
+         return (fromIntegral x,fromIntegral y
+                ,filter (mousePressed ret) [ButtonLeft
+                                           ,ButtonMiddle
+                                           ,ButtonRight
+                                           ,ButtonWheelUp
+                                           ,ButtonWheelDown])
 
 
 
@@ -625,4 +626,3 @@
 -- | Gets the state of the application.
 getAppState :: IO [Focus]
 getAppState = fmap fromBitmask sdlGetAppState
-
diff --git a/Graphics/UI/SDL/Utilities.hs b/Graphics/UI/SDL/Utilities.hs
--- a/Graphics/UI/SDL/Utilities.hs
+++ b/Graphics/UI/SDL/Utilities.hs
@@ -13,6 +13,7 @@
 module Graphics.UI.SDL.Utilities where
 
 import Foreign (Bits((.|.), (.&.)))
+import Foreign.C (CInt)
 
 import Prelude hiding (Enum(..))
 
@@ -52,3 +53,9 @@
                    else id
 
 -}
+
+fromCInt :: Num a => CInt -> a
+fromCInt = fromIntegral
+
+toCInt :: Int -> CInt
+toCInt = fromIntegral
diff --git a/Graphics/UI/SDL/Video.hsc b/Graphics/UI/SDL/Video.hsc
--- a/Graphics/UI/SDL/Video.hsc
+++ b/Graphics/UI/SDL/Video.hsc
@@ -83,14 +83,14 @@
 
 import Foreign (Ptr, FunPtr, Storable(peek), castPtr, plusPtr, nullPtr, newForeignPtr_,
                finalizeForeignPtr, alloca, withForeignPtr, newForeignPtr)
-import Foreign.C (peekCString, CString)
+import Foreign.C (peekCString, CString, CInt)
 import Foreign.Marshal.Array (withArrayLen, peekArray0, peekArray, allocaArray)
 import Foreign.Marshal.Utils (with, toBool, maybeWith, maybePeek, fromBool)
 import Control.Exception (bracket)
 import Data.Word (Word8, Word16, Word32)
 import Data.Int (Int32)
 
-import Graphics.UI.SDL.Utilities (Enum(..), intToBool, toBitmask)
+import Graphics.UI.SDL.Utilities (Enum(..), intToBool, toBitmask, fromCInt, toCInt)
 import Graphics.UI.SDL.General (unwrapMaybe, unwrapBool)
 import Graphics.UI.SDL.Rect (Rect(rectY, rectX, rectW, rectH))
 import Graphics.UI.SDL.Color (Pixel(..), Color)
@@ -141,7 +141,6 @@
 fromToggle Enable = 1
 fromToggle Query = (-1)
 
-
 foreign import ccall unsafe "SDL_GetVideoSurface" sdlGetVideoSurface :: IO (Ptr SurfaceStruct)
 
 -- | Returns the video surface or @Nothing@ on error.
@@ -153,12 +152,12 @@
 getVideoSurface :: IO Surface
 getVideoSurface = unwrapMaybe "SDL_GetVideoSurface" tryGetVideoSurface
 
-foreign import ccall unsafe "SDL_VideoDriverName" sdlVideoDriverName :: CString -> Int -> IO CString
+foreign import ccall unsafe "SDL_VideoDriverName" sdlVideoDriverName :: CString -> CInt -> IO CString
 
 -- | Returns the video driver name or @Nothing@ on error. Notice, the driver name is limited to 256 chars.
 tryVideoDriverName :: IO (Maybe String)
 tryVideoDriverName 
-    = allocaArray size (\ptr -> sdlVideoDriverName ptr size >>= maybePeek peekCString)
+    = allocaArray size (\ptr -> sdlVideoDriverName ptr (toCInt size) >>= maybePeek peekCString)
     where size = 256
 
 -- | Returns the video driver name, throwing an exception on error. See also 'tryVideoDriverName'.
@@ -192,7 +191,7 @@
     where getFormat = maybe (\action -> action nullPtr) withForeignPtr mbFormat
 
 -- int SDL_VideoModeOK(int width, int height, int bpp, Uint32 flags);
-foreign import ccall unsafe "SDL_VideoModeOK" sdlVideoModeOK :: Int -> Int -> Int -> Word32 -> IO Int
+foreign import ccall unsafe "SDL_VideoModeOK" sdlVideoModeOK :: CInt -> CInt -> CInt -> Word32 -> IO CInt
 
 -- | Check to see if a particular video mode is supported.
 --   Returns the bits-per-pixel of the closest available mode with the given width,
@@ -203,13 +202,13 @@
             -> [SurfaceFlag] -- ^ Flags.
             -> IO (Maybe Int)
 videoModeOK width height bpp flags
-    = do ret <- sdlVideoModeOK width height bpp (toBitmask flags)
+    = do ret <- sdlVideoModeOK (toCInt width) (toCInt height) (toCInt bpp) (toBitmask flags)
          case ret of
            0 -> return Nothing
-           x -> return (Just x)
+           x -> return (Just $ fromCInt x)
 
 -- SDL_Surface *SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags);
-foreign import ccall unsafe "SDL_SetVideoMode" sdlSetVideoMode :: Int -> Int -> Int -> Word32 -> IO (Ptr SurfaceStruct)
+foreign import ccall unsafe "SDL_SetVideoMode" sdlSetVideoMode :: CInt -> CInt -> CInt -> Word32 -> IO (Ptr SurfaceStruct)
 
 -- | Set up a video mode with the specified width, height and bits-per-pixel.
 --   Returns @Nothing@ on error.
@@ -219,7 +218,7 @@
                 -> [SurfaceFlag] -- ^ Flags.
                 -> IO (Maybe Surface)
 trySetVideoMode width height bpp flags
-    = sdlSetVideoMode width height bpp (toBitmask flags) >>= maybePeek newForeignPtr_
+    = sdlSetVideoMode (toCInt width) (toCInt height) (toCInt bpp) (toBitmask flags) >>= maybePeek newForeignPtr_
 
 -- | Same as 'trySetVideoMode' except it throws an exception on error.
 setVideoMode :: Int -> Int -> Int -> [SurfaceFlag] -> IO Surface
@@ -241,7 +240,7 @@
 
 
 -- void SDL_UpdateRects(SDL_Surface *screen, int numrects, SDL_Rect *rects);
-foreign import ccall unsafe "SDL_UpdateRects" sdlUpdateRects :: Ptr SurfaceStruct -> Int -> Ptr Rect -> IO ()
+foreign import ccall unsafe "SDL_UpdateRects" sdlUpdateRects :: Ptr SurfaceStruct -> CInt -> Ptr Rect -> IO ()
 
 -- | Makes sure the given list of rectangles is updated on the given screen.
 --   The rectangles are not automatically merged or checked for overlap.
@@ -251,10 +250,10 @@
 updateRects surface rects
     = withForeignPtr surface $ \ptr ->
       withArrayLen rects $ \len array ->
-      sdlUpdateRects ptr len array
+      sdlUpdateRects ptr (toCInt len) array
 
 -- int SDL_Flip(SDL_Surface *screen);
-foreign import ccall unsafe "SDL_Flip" sdlFlip :: Ptr SurfaceStruct -> IO Int
+foreign import ccall unsafe "SDL_Flip" sdlFlip :: Ptr SurfaceStruct -> IO CInt
 
 -- | Swaps screen buffers.
 tryFlip :: Surface -> IO Bool
@@ -270,34 +269,34 @@
 flip = unwrapBool "SDL_Flip" . tryFlip
 
 -- int SDL_SetColors(SDL_Surface *surface, SDL_Color *colors, int firstcolor, int ncolors);
-foreign import ccall unsafe "SDL_SetColors" sdlSetColors :: Ptr SurfaceStruct -> Ptr Color -> Int -> Int -> IO Int
+foreign import ccall unsafe "SDL_SetColors" sdlSetColors :: Ptr SurfaceStruct -> Ptr Color -> CInt -> CInt -> IO CInt
 
 -- | Sets a portion of the colormap for the given 8-bit surface.
 setColors :: Surface -> [Color] -> Int -> IO Bool
 setColors surface colors start
     = withForeignPtr surface $ \ptr ->
       withArrayLen colors $ \len array ->
-      fmap toBool (sdlSetColors ptr array start len)
+      fmap toBool (sdlSetColors ptr array (toCInt start) (toCInt len))
 
 -- int SDL_SetPalette(SDL_Surface *surface, int flags, SDL_Color *colors, int firstcolor, int ncolors);
 foreign import ccall unsafe "SDL_SetPalette" sdlSetPalette
-    :: Ptr SurfaceStruct -> Int -> Ptr Color -> Int -> Int -> IO Int
+    :: Ptr SurfaceStruct -> CInt -> Ptr Color -> CInt -> CInt -> IO CInt
 
 -- | Sets the colors in the palette of an 8-bit surface.
 setPalette :: Surface -> [Palette] -> [Color] -> Int -> IO Bool
 setPalette surface flags colors start
     = withForeignPtr surface $ \ptr ->
       withArrayLen colors $ \len array ->
-      fmap toBool (sdlSetPalette ptr (toBitmask flags) array start len)
+      fmap toBool (sdlSetPalette ptr (toCInt $ toBitmask flags) array (toCInt start) (toCInt len))
 
 --int SDL_SetGamma(float redgamma, float greengamma, float bluegamma);
-foreign import ccall unsafe "SDL_SetGamma" sdlSetGamma :: Float -> Float -> Float -> IO Int
+foreign import ccall unsafe "SDL_SetGamma" sdlSetGamma :: Float -> Float -> Float -> IO CInt
 setGamma :: Float -> Float -> Float -> IO Bool
 setGamma red green blue
-    = intToBool (-1) (sdlSetGamma red green blue)
+    = intToBool (-1) (fmap fromCInt $ sdlSetGamma red green blue)
 
 -- int SDL_GetGammaRamp(Uint16 *redtable, Uint16 *greentable, Uint16 *bluetable);
-foreign import ccall unsafe "SDL_GetGammaRamp" sdlGetGammaRamp :: Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> IO Int
+foreign import ccall unsafe "SDL_GetGammaRamp" sdlGetGammaRamp :: Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> IO CInt
 tryGetGammaRamp :: IO (Maybe ([Word16],[Word16],[Word16]))
 tryGetGammaRamp
     = allocaArray size $ \red ->
@@ -314,13 +313,13 @@
 getGammaRamp = unwrapMaybe "SDL_GetGammaRamp" tryGetGammaRamp
 
 -- int SDL_SetGammaRamp(Uint16 *redtable, Uint16 *greentable, Uint16 *bluetable);
-foreign import ccall unsafe "SDL_SetGammaRamp" sdlSetGammaRamp :: Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> IO Int
+foreign import ccall unsafe "SDL_SetGammaRamp" sdlSetGammaRamp :: Ptr Word16 -> Ptr Word16 -> Ptr Word16 -> IO CInt
 trySetGammaRamp :: [Word16] -> [Word16] -> [Word16] -> IO Bool
 trySetGammaRamp red green blue
     = withArrayLen red $ check $ \ptrRed ->
       withArrayLen green $ check $ \ptrGreen ->
       withArrayLen blue $ check $ \ptrBlue ->
-      intToBool (-1) (sdlSetGammaRamp ptrRed ptrGreen ptrBlue)
+      intToBool (-1) (fmap fromCInt $ sdlSetGammaRamp ptrRed ptrGreen ptrBlue)
     where check action 256 ptr = action ptr
           check _ _ _ = return False
 
@@ -389,13 +388,13 @@
 
 -- SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
 foreign import ccall unsafe "SDL_CreateRGBSurface" sdlCreateRGBSurface
-    :: Word32 -> Int -> Int -> Int -> Word32 -> Word32 -> Word32 -> Word32 -> IO (Ptr SurfaceStruct)
+    :: Word32 -> CInt -> CInt -> CInt -> Word32 -> Word32 -> Word32 -> Word32 -> IO (Ptr SurfaceStruct)
 
 -- | Creates an empty @Surface@. Returns @Nothing@ on error.
 tryCreateRGBSurface :: [SurfaceFlag] -> Int -> Int -> Int
                   -> Word32 -> Word32 -> Word32 -> Word32 -> IO (Maybe Surface)
 tryCreateRGBSurface flags width height bpp rmask gmask bmask amask
-    = sdlCreateRGBSurface (toBitmask flags) width height bpp rmask gmask bmask amask >>=
+    = sdlCreateRGBSurface (toBitmask flags) (toCInt width) (toCInt height) (toCInt bpp) rmask gmask bmask amask >>=
       maybePeek mkFinalizedSurface
 
 -- | Creates an empty @Surface@. Throws an exception on error.
@@ -423,11 +422,11 @@
 
 -- SDL_Surface *SDL_CreateRGBSurfaceFrom(void *pixels, int width, int height, int depth, int pitch, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
 foreign import ccall unsafe "SDL_CreateRGBSurfaceFrom" sdlCreateRGBSurfaceFrom
-    :: Ptr Word8 -> Int -> Int -> Int -> Int -> Word32 -> Word32 -> Word32 -> Word32 -> IO (Ptr SurfaceStruct)
+    :: Ptr Word8 -> CInt -> CInt -> CInt -> CInt -> Word32 -> Word32 -> Word32 -> Word32 -> IO (Ptr SurfaceStruct)
 tryCreateRGBSurfaceFrom :: Ptr a -> Int -> Int -> Int -> Int
                         -> Word32 -> Word32 -> Word32 -> Word32 -> IO (Maybe Surface)
 tryCreateRGBSurfaceFrom pixels width height depth pitch rmask gmask bmask amask
-    = sdlCreateRGBSurfaceFrom (castPtr pixels) width height depth pitch rmask gmask bmask amask >>=
+    = sdlCreateRGBSurfaceFrom (castPtr pixels) (toCInt width) (toCInt height) (toCInt depth) (toCInt pitch) rmask gmask bmask amask >>=
       maybePeek mkFinalizedSurface
 
 createRGBSurfaceFrom :: Ptr a -> Int -> Int -> Int -> Int
@@ -456,13 +455,13 @@
 #endif
 
 -- int SDL_LockSurface(SDL_Surface *surface);
-foreign import ccall unsafe "SDL_LockSurface" sdlLockSurface :: Ptr SurfaceStruct -> IO Int
+foreign import ccall unsafe "SDL_LockSurface" sdlLockSurface :: Ptr SurfaceStruct -> IO CInt
 
 -- | Locks a surface for direct access.
 lockSurface :: Surface -> IO Bool
 lockSurface surface
     = withForeignPtr surface $ \ptr ->
-      intToBool (-1) (sdlLockSurface ptr)
+      intToBool (-1) (fmap fromCInt $ sdlLockSurface ptr)
 
 -- void SDL_UnlockSurface(SDL_Surface *surface);
 foreign import ccall unsafe "SDL_UnlockSurface" sdlUnlockSurface :: Ptr SurfaceStruct -> IO ()
@@ -473,7 +472,7 @@
 
 -- extern DECLSPEC SDL_Surface * SDLCALL SDL_LoadBMP_RW(SDL_RWops *src, int freesrc);
 -- define SDL_LoadBMP(file)       SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1)
-foreign import ccall unsafe "SDL_LoadBMP_RW" sdlLoadBMP_RW :: Ptr RWopsStruct -> Int -> IO (Ptr SurfaceStruct)
+foreign import ccall unsafe "SDL_LoadBMP_RW" sdlLoadBMP_RW :: Ptr RWopsStruct -> CInt -> IO (Ptr SurfaceStruct)
 
 tryLoadBMPRW :: RWops -> Bool -> IO (Maybe Surface)
 tryLoadBMPRW rw freesrc
@@ -490,13 +489,13 @@
 
 -- extern DECLSPEC int SDLCALL SDL_SaveBMP_RW
 --                (SDL_Surface *surface, SDL_RWops *dst, int freedst);
-foreign import ccall unsafe "SDL_SaveBMP_RW" sdlSaveBMP_RW :: Ptr SurfaceStruct -> Ptr RWopsStruct -> Int -> IO Int
+foreign import ccall unsafe "SDL_SaveBMP_RW" sdlSaveBMP_RW :: Ptr SurfaceStruct -> Ptr RWopsStruct -> CInt -> IO CInt
 
 saveBMPRW :: Surface -> RWops -> Bool -> IO Bool
 saveBMPRW surface rw freedst
     = withForeignPtr surface $ \ptr ->
       withForeignPtr rw $ \rwPtr ->
-      intToBool (-1) (sdlSaveBMP_RW ptr rwPtr (fromBool freedst))
+      intToBool (-1) (fmap fromCInt $ sdlSaveBMP_RW ptr rwPtr (fromBool freedst))
 
 saveBMP :: Surface -> FilePath -> IO Bool
 saveBMP surface filepath
@@ -505,20 +504,20 @@
 
 
 -- int SDL_SetColorKey(SDL_Surface *surface, Uint32 flag, Uint32 key);
-foreign import ccall unsafe "SDL_SetColorKey" sdlSetColorKey :: Ptr SurfaceStruct -> Word32 -> Word32 -> IO Int
+foreign import ccall unsafe "SDL_SetColorKey" sdlSetColorKey :: Ptr SurfaceStruct -> Word32 -> Word32 -> IO CInt
 setColorKey :: Surface -> [SurfaceFlag] -> Pixel -> IO Bool
 setColorKey surface flags (Pixel w)
     = withForeignPtr surface $ \ptr ->
-      intToBool (-1) (sdlSetColorKey ptr (toBitmask flags) w)
+      intToBool (-1) (fmap fromCInt $ sdlSetColorKey ptr (toBitmask flags) w)
 
 -- int SDL_SetAlpha(SDL_Surface *surface, Uint32 flag, Uint8 alpha);
-foreign import ccall unsafe "SDL_SetAlpha" sdlSetAlpha :: Ptr SurfaceStruct -> Word32 -> Word8 -> IO Int
+foreign import ccall unsafe "SDL_SetAlpha" sdlSetAlpha :: Ptr SurfaceStruct -> Word32 -> Word8 -> IO CInt
 
 -- | Adjusts the alpha properties of a surface.
 setAlpha :: Surface -> [SurfaceFlag] -> Word8 -> IO Bool
 setAlpha surface flags alpha
     = withForeignPtr surface $ \ptr ->
-      intToBool (-1) (sdlSetAlpha ptr (toBitmask flags) alpha)
+      intToBool (-1) (fmap fromCInt $ sdlSetAlpha ptr (toBitmask flags) alpha)
 
 -- void SDL_SetClipRect(SDL_Surface *surface, SDL_Rect *rect);
 foreign import ccall unsafe "SDL_SetClipRect" sdlSetClipRect :: Ptr SurfaceStruct -> Ptr Rect -> IO ()
@@ -569,7 +568,7 @@
 
 -- int SDL_UpperBlit(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);
 foreign import ccall unsafe "SDL_UpperBlit" sdlBlitSurface
-    :: Ptr SurfaceStruct -> Ptr Rect -> Ptr SurfaceStruct -> Ptr Rect -> IO Int
+    :: Ptr SurfaceStruct -> Ptr Rect -> Ptr SurfaceStruct -> Ptr Rect -> IO CInt
 
 -- | This function performs a fast blit from the source surface to the destination surface.
 blitSurface :: Surface -> Maybe Rect -> Surface -> Maybe Rect -> IO Bool
@@ -578,18 +577,18 @@
       withForeignPtr dst $ \dstPtr ->
       maybeWith with srcRect $ \srcRectPtr ->
       maybeWith with dstRect $ \dstRectPtr ->
-      intToBool (-1) (sdlBlitSurface srcPtr srcRectPtr dstPtr dstRectPtr)
+      intToBool (-1) (fmap fromCInt $ sdlBlitSurface srcPtr srcRectPtr dstPtr dstRectPtr)
 
 
 -- int SDL_FillRect(SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color);
-foreign import ccall unsafe "SDL_FillRect" sdlFillRect :: Ptr SurfaceStruct -> Ptr Rect -> Word32 -> IO Int
+foreign import ccall unsafe "SDL_FillRect" sdlFillRect :: Ptr SurfaceStruct -> Ptr Rect -> Word32 -> IO CInt
 
 -- | This function performs a fast fill of the given rectangle with some color.
 fillRect :: Surface -> Maybe Rect -> Pixel -> IO Bool
 fillRect surface mbRect (Pixel w)
     = withForeignPtr surface $ \ptr ->
       maybeWith with mbRect $ \rect ->
-      intToBool (-1) (sdlFillRect ptr rect w)
+      intToBool (-1) (fmap fromCInt $ sdlFillRect ptr rect w)
 
 -- SDL_Surface *SDL_DisplayFormat(SDL_Surface *surface);
 foreign import ccall unsafe "SDL_DisplayFormat" sdlDisplayFormat :: Ptr SurfaceStruct -> IO (Ptr SurfaceStruct)
@@ -627,7 +626,7 @@
 warpMouse = sdlWarpMouse
 
 -- int SDL_ShowCursor(int toggle);
-foreign import ccall unsafe "SDL_ShowCursor" sdlShowCursor :: Int -> IO Int
+foreign import ccall unsafe "SDL_ShowCursor" sdlShowCursor :: CInt -> IO CInt
 
 -- | Toggle whether or not the cursor is shown on the screen.
 showCursor :: Bool -> IO ()
@@ -643,8 +642,8 @@
 queryCursorState = fmap toBool (sdlShowCursor (fromToggle Query))
 
 
-type GLAttr = Int
-type GLValue = Int
+type GLAttr = CInt
+type GLValue = CInt
 
 glRedSize, glGreenSize, glBlueSize, glAlphaSize, glBufferSize, glDoubleBuffer :: GLAttr
 glDepthSize, glStencilSize, glAccumRedSize, glAccumGreenSize, glAccumBlueSize :: GLAttr
@@ -667,7 +666,7 @@
 glMultiSampleSamples = #{const SDL_GL_MULTISAMPLESAMPLES}
 
 --int SDL_GL_SetAttribute(SDL_GLattr attr, int value);
-foreign import ccall unsafe "SDL_GL_SetAttribute" sdlGLSetAttribute :: Int -> Int -> IO Int
+foreign import ccall unsafe "SDL_GL_SetAttribute" sdlGLSetAttribute :: CInt -> CInt -> IO CInt
 -- | Sets a special SDL\/OpenGL attribute. Returns @False@ on error.
 tryGLSetAttribute :: GLAttr -> GLValue -> IO Bool
 tryGLSetAttribute attr value = fmap (==0) (sdlGLSetAttribute attr value)
@@ -677,7 +676,7 @@
 glSetAttribute attr value = unwrapBool "SDL_GL_SetAttribute" (tryGLSetAttribute attr value)
 
 -- int SDL_GL_GetAttribute(SDLGLattr attr, int *value);
-foreign import ccall unsafe "SDL_GL_GetAttribute" sdlGLGetAttribute :: Int -> Ptr Int -> IO Int
+foreign import ccall unsafe "SDL_GL_GetAttribute" sdlGLGetAttribute :: CInt -> Ptr CInt -> IO CInt
 
 -- | Gets the value of a special SDL\/OpenGL attribute. Returns @Nothing@ on error.
 tryGLGetAttribute :: GLAttr -> IO (Maybe GLValue)
diff --git a/SDL.cabal b/SDL.cabal
--- a/SDL.cabal
+++ b/SDL.cabal
@@ -1,5 +1,5 @@
 Name: SDL
-Version: 0.5.4
+Version: 0.5.5
 Maintainer: Lemmih (lemmih@gmail.com)
 Author: Lemmih (lemmih@gmail.com)
 Copyright: 2004-2008, Lemmih
@@ -9,7 +9,7 @@
 Build-Type: Custom
 Category: Foreign binding
 Synopsis: Binding to libSDL
-Tested-with: GHC ==6.6, GHC ==6.8, Hugs ==20050308
+Tested-with: GHC ==6.6, GHC ==6.8, GHC ==6.10, Hugs ==20050308
 Extensions: CPP, ForeignFunctionInterface, MultiParamTypeClasses, FunctionalDependencies
 Exposed-Modules:
   Graphics.UI.SDL,
