diff --git a/System/Win32/XInput.hsc b/System/Win32/XInput.hsc
--- a/System/Win32/XInput.hsc
+++ b/System/Win32/XInput.hsc
@@ -39,12 +39,6 @@
 type DeviceSubtype = BYTE
 #{enum DeviceSubtype,
  , xINPUT_DEVSUBTYPE_GAMEPAD      = XINPUT_DEVSUBTYPE_GAMEPAD
- , xINPUT_DEVSUBTYPE_WHEEL        = XINPUT_DEVSUBTYPE_WHEEL
- , xINPUT_DEVSUBTYPE_ARCADE_STICK = XINPUT_DEVSUBTYPE_ARCADE_STICK
- , xINPUT_DEVSUBTYPE_FLIGHT_SICK  = XINPUT_DEVSUBTYPE_FLIGHT_SICK
- , xINPUT_DEVSUBTYPE_DANCE_PAD    = XINPUT_DEVSUBTYPE_DANCE_PAD
- , xINPUT_DEVSUBTYPE_GUITAR       = XINPUT_DEVSUBTYPE_GUITAR
- , xINPUT_DEVSUBTYPE_DRUM_KIT     = XINPUT_DEVSUBTYPE_DRUM_KIT
 }
 
 type DeviceFlags = WORD
@@ -82,81 +76,6 @@
  , xINPUT_FLAG_GAMEPAD = XINPUT_FLAG_GAMEPAD
 }
 
-type BatteryDeviceType = BYTE
-#{enum BatteryDeviceType,
- , bATTERY_DEVTYPE_GAMEPAD = BATTERY_DEVTYPE_GAMEPAD
- , bATTERY_DEVTYPE_HEADSET = BATTERY_DEVTYPE_HEADSET
-}
-
-type BatteryType = BYTE
-#{enum BatteryType,
- , bATTERY_TYPE_DISCONNECTED = BATTERY_TYPE_DISCONNECTED
- , bATTERY_TYPE_WIRED        = BATTERY_TYPE_WIRED
- , bATTERY_TYPE_ALKALINE     = BATTERY_TYPE_ALKALINE
- , bATTERY_TYPE_NIMH         = BATTERY_TYPE_NIMH
- , bATTERY_TYPE_UNKNOWN      = BATTERY_TYPE_UNKNOWN
-}
-
-type BatteryLevel = BYTE
-#{enum BatteryLevel,
- , bATTERY_LEVEL_EMPTY  = BATTERY_LEVEL_EMPTY 
- , bATTERY_LEVEL_LOW    = BATTERY_LEVEL_LOW
- , bATTERY_LEVEL_MEDIUM = BATTERY_LEVEL_MEDIUM
- , bATTERY_LEVEL_FULL   = BATTERY_LEVEL_FULL
-}
-
-type UserMaxCount = Int
-#{enum UserMaxCount,
- , userMaxCount = XUSER_MAX_COUNT
-}
-type UserIndexAny = Int
-#{enum UserMaxCount,
- , userIndexAny = XUSER_INDEX_ANY
-}
-
-type VirtualKey = WORD
-#{enum VirtualKey,
- , vK_PAD_A                = VK_PAD_A
- , vK_PAD_B                = VK_PAD_B
- , vK_PAD_X                = VK_PAD_X
- , vK_PAD_Y                = VK_PAD_Y
- , vK_PAD_RSHOULDER        = VK_PAD_RSHOULDER
- , vK_PAD_LSHOULDER        = VK_PAD_LSHOULDER
- , vK_PAD_LTRIGGER         = VK_PAD_LTRIGGER
- , vK_PAD_RTRIGGER         = VK_PAD_RTRIGGER
- , vK_PAD_DPAD_UP          = VK_PAD_DPAD_UP
- , vK_PAD_DPAD_DOWN        = VK_PAD_DPAD_DOWN
- , vK_PAD_DPAD_LEFT        = VK_PAD_DPAD_LEFT
- , vK_PAD_DPAD_RIGHT       = VK_PAD_DPAD_RIGHT
- , vK_PAD_START            = VK_PAD_START
- , vK_PAD_BACK             = VK_PAD_BACK
- , vK_PAD_LTHUMB_PRESS     = VK_PAD_LTHUMB_PRESS
- , vK_PAD_RTHUMB_PRESS     = VK_PAD_RTHUMB_PRESS
- , vK_PAD_LTHUMB_UP        = VK_PAD_LTHUMB_UP
- , vK_PAD_LTHUMB_DOWN      = VK_PAD_LTHUMB_DOWN
- , vK_PAD_LTHUMB_RIGHT     = VK_PAD_LTHUMB_RIGHT
- , vK_PAD_LTHUMB_LEFT      = VK_PAD_LTHUMB_LEFT
- , vK_PAD_LTHUMB_UPLEFT    = VK_PAD_LTHUMB_UPLEFT
- , vK_PAD_LTHUMB_UPRIGHT   = VK_PAD_LTHUMB_UPRIGHT
- , vK_PAD_LTHUMB_DOWNRIGHT = VK_PAD_LTHUMB_DOWNRIGHT
- , vK_PAD_LTHUMB_DOWNLEFT  = VK_PAD_LTHUMB_DOWNLEFT
- , vK_PAD_RTHUMB_UP        = VK_PAD_RTHUMB_UP
- , vK_PAD_RTHUMB_DOWN      = VK_PAD_RTHUMB_DOWN
- , vK_PAD_RTHUMB_RIGHT     = VK_PAD_RTHUMB_RIGHT
- , vK_PAD_RTHUMB_LEFT      = VK_PAD_RTHUMB_LEFT
- , vK_PAD_RTHUMB_UPLEFT    = VK_PAD_RTHUMB_UPLEFT
- , vK_PAD_RTHUMB_UPRIGHT   = VK_PAD_RTHUMB_UPRIGHT
- , vK_PAD_RTHUMB_DOWNRIGHT = VK_PAD_RTHUMB_DOWNRIGHT
- , vK_PAD_RTHUMB_DOWNLEFT  = VK_PAD_RTHUMB_DOWNLEFT
-}
-
-type KeystrokeFlag = WORD
-#{enum KeystrokeFlag,
- , xINPUT_KEYSTROKE_KEYDOWN = XINPUT_KEYSTROKE_KEYDOWN
- , xINPUT_KEYSTROKE_KEYUP   = XINPUT_KEYSTROKE_KEYUP
- , xINPUT_KEYSTROKE_REPEAT  = XINPUT_KEYSTROKE_REPEAT
-}
-
 data GUID = GUID
     { data1 :: Int32
     , data2 :: Int16
@@ -257,44 +176,6 @@
         v <- (#peek XINPUT_CAPABILITIES, Vibration) buf
         return $ Capabilities t s f g v
 
-data Battery = Battery { batteryType, batteryLevel :: BYTE }
-
-instance Storable Battery where
-    sizeOf     = const (#size XINPUT_BATTERY_INFORMATION)
-    alignment  = sizeOf
-    poke buf k = do
-        (#poke XINPUT_BATTERY_INFORMATION, BatteryType) buf (batteryType k)
-        (#poke XINPUT_BATTERY_INFORMATION, BatteryLevel) buf (batteryLevel k)
-    peek buf   = do
-        t <- (#peek XINPUT_BATTERY_INFORMATION, BatteryType) buf
-        l <- (#peek XINPUT_BATTERY_INFORMATION, BatteryLevel) buf
-        return $ Battery t l
-
-data Keystroke = Keystroke
-    { virtualKey :: VirtualKey
-    , unicode    :: CWchar
-    , flags      :: KeystrokeFlag
-    , userIndex  :: BYTE
-    , hidCode    :: BYTE
-    }
-
-instance Storable Keystroke where
-    sizeOf     = const (#size XINPUT_KEYSTROKE)
-    alignment  = sizeOf
-    poke buf k = do
-        (#poke XINPUT_KEYSTROKE, VirtualKey) buf (virtualKey k)
-        (#poke XINPUT_KEYSTROKE, Unicode) buf (unicode k)
-        (#poke XINPUT_KEYSTROKE, Flags) buf (flags k)
-        (#poke XINPUT_KEYSTROKE, UserIndex) buf (userIndex k)
-        (#poke XINPUT_KEYSTROKE, HidCode) buf (hidCode k)
-    peek buf   = do
-        v <- (#peek XINPUT_KEYSTROKE, VirtualKey) buf
-        u <- (#peek XINPUT_KEYSTROKE, Unicode) buf
-        f <- (#peek XINPUT_KEYSTROKE, Flags) buf
-        i <- (#peek XINPUT_KEYSTROKE, UserIndex) buf
-        h <- (#peek XINPUT_KEYSTROKE, HidCode) buf
-        return $ Keystroke v u f i h
-
 getState :: PlayerNumber -> IO (Maybe PadState)
 getState u = alloca $ \res -> do
     r <- c_XInputGetState u res
@@ -327,30 +208,6 @@
                 return Nothing
 foreign import stdcall unsafe "XInput.h XInputGetDSoundAudioDeviceGuids"
     c_XInputGetDSoundAudioDeviceGuids :: DWORD -> Ptr GUID -> Ptr GUID -> IO DWORD
-
-getBatteryInformation :: PlayerNumber -> BatteryDeviceType -> IO (Maybe Battery)
-getBatteryInformation u d = alloca $ \res -> do
-    r <- c_XInputGetBatteryInformation u d res
-    if r == 0
-        then do
-            b <- peek res
-            return $ Just b
-        else
-            return Nothing
-foreign import stdcall unsafe "XInput.h XInputGetBatteryInformation"
-    c_XInputGetBatteryInformation :: DWORD -> BYTE -> Ptr Battery -> IO DWORD
-
-getKeystroke :: PlayerNumber -> IO (Maybe Keystroke)
-getKeystroke u = alloca $ \res -> do
-    r <- c_XInputGetKeystroke u xINPUT_FLAG_GAMEPAD res
-    if r == 0
-        then do
-            k <- peek res
-            return $ Just k
-        else
-            return Nothing
-foreign import stdcall unsafe "XInput.h XInputGetKeystroke"
-    c_XInputGetKeystroke :: DWORD -> DWORD -> Ptr Keystroke -> IO DWORD
 
 getCapabilities :: PlayerNumber -> IO (Maybe Capabilities)
 getCapabilities u = alloca $ \res -> do
diff --git a/XInput.cabal b/XInput.cabal
--- a/XInput.cabal
+++ b/XInput.cabal
@@ -1,12 +1,20 @@
 Name:            XInput
-Version:         0.0
-Cabal-Version:   >= 1.2
+Version:         0.1
+Cabal-Version:   >= 1.6
 Synopsis:        Bindings for the DirectX XInput library.
+Description:     Bindings for the DirectX XInput library.
+Category:        System
 Build-Type:      Custom
 License:         BSD3
 License-file:    LICENSE
 Author:          Erik Charlebois
+Copyright:       Erik Charlebois
 Maintainer:      Erik Charlebois <erikcharlebois@gmail.com>
+Homepage:        http://code.fac9.com/xinput/
+
+source-repository head
+    type:     darcs
+    location: http://code.fac9.com/xinput/
 
 Library
     Build-Depends:   base, Win32
