diff --git a/System/USB.hs b/System/USB.hs
--- a/System/USB.hs
+++ b/System/USB.hs
@@ -3,9 +3,7 @@
 -- Module      :  System.USB
 -- Copyright   :  (c) 2009 Bas van Dijk
 -- License     :  BSD-style (see the file LICENSE)
---
 -- Maintainer  :  Bas van Dijk <v.dijk.bas@gmail.com>
--- Stability   :  Experimental
 --
 -- This library allows you to communicate with USB devices from userspace. It is
 -- implemented as a high-level wrapper around @bindings-libusb@ which is a
@@ -28,21 +26,24 @@
 -- * The USB 2.0 specification at:
 --   <http://www.usb.org/developers/docs/>
 --
---  * The 'Bindings.Libusb' documentation at:
+--  * The @bindings-libusb@ documentation at:
 --    <http://hackage.haskell.org/package/bindings-libusb>
 --
+--  * \"USB in a NutShell\" at:
+--    <http://www.beyondlogic.org/usbnutshell/usb1.htm>
+--
 --------------------------------------------------------------------------------
 
 module System.USB
     ( module System.USB.Initialization
-    , module System.USB.DeviceHandlingAndEnumeration
+    , module System.USB.Devices
     , module System.USB.Descriptors
     , module System.USB.IO.Synchronous
     , module System.USB.Exceptions
     ) where
 
 import System.USB.Initialization
-import System.USB.DeviceHandlingAndEnumeration
+import System.USB.Devices
 import System.USB.Descriptors
 import System.USB.IO.Synchronous
 import System.USB.Exceptions
diff --git a/System/USB/Descriptors.hs b/System/USB/Descriptors.hs
--- a/System/USB/Descriptors.hs
+++ b/System/USB/Descriptors.hs
@@ -1,3 +1,25 @@
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  System.USB.Descriptors
+-- Copyright   :  (c) 2009 Bas van Dijk
+-- License     :  BSD3 (see the file LICENSE)
+-- Maintainer  :  Bas van Dijk <v.dijk.bas@gmail.com>
+--
+-- USB devices report their attributes using descriptors. A descriptor is a data
+-- structure with a defined format. Using descriptors allows concise storage of
+-- the attributes of individual configurations because each configuration may
+-- reuse descriptors or portions of descriptors from other configurations that
+-- have the same characteristics. In this manner, the descriptors resemble
+-- individual data records in a relational database.
+--
+-- Where appropriate, descriptors contain references to string descriptors
+-- ('StrIx') that provide textual information describing a descriptor in
+-- human-readable form. The inclusion of string descriptors is optional. If a
+-- device does not support string descriptors, string reference fields must be
+-- reset to zero to indicate no string descriptor is available.
+--
+--------------------------------------------------------------------------------
+
 module System.USB.Descriptors
     ( -- * Device descriptor
       DeviceDesc
@@ -5,19 +27,24 @@
 
       -- ** Querying device descriptors
     , deviceUSBSpecReleaseNumber
-    , BCD4
     , deviceClass
     , deviceSubClass
     , deviceProtocol
     , deviceMaxPacketSize0
-    , deviceVendorId, VendorId
-    , deviceProductId, ProductId
+    , deviceVendorId
+    , deviceProductId
     , deviceReleaseNumber
     , deviceManufacturerStrIx
     , deviceProductStrIx
     , deviceSerialNumberStrIx
     , deviceNumConfigs
 
+    , BCD4
+
+      -- | For a database of USB vendors and products see the /usb-id-database/
+      -- package at: <http://hackage.haskell.org/package/usb-id-database>
+    , VendorId, ProductId
+
       -- * Configuration descriptor
     , ConfigDesc
 
@@ -28,16 +55,15 @@
       -- ** Querying configuration descriptors
     , configValue
     , configStrIx
-
     , configAttribs
-    , ConfigAttribs
-    , DeviceStatus(..)
-
     , configMaxPower
     , configNumInterfaces
     , configInterfaces
     , configExtra
 
+    , ConfigAttribs
+    , DeviceStatus(..)
+
       -- * Interface descriptor
     , InterfaceDesc
 
@@ -57,24 +83,24 @@
 
       -- ** Querying endpoint descriptors
     , endpointAddress
+    , endpointAttribs
+    , endpointMaxPacketSize
+    , endpointInterval
+    , endpointRefresh
+    , endpointSynchAddress
+    , endpointExtra
+
     , EndpointAddress(..)
     , TransferDirection(..)
 
-    , endpointAttribs
     , EndpointAttribs
     , TransferType(..)
     , Synchronization(..)
     , Usage(..)
 
-    , endpointMaxPacketSize
     , MaxPacketSize(..)
     , TransactionOpportunities(..)
 
-    , endpointInterval
-    , endpointRefresh
-    , endpointSynchAddress
-    , endpointExtra
-
       -- * String descriptors
     , getLanguages
     , LangId, PrimaryLangId, SubLangId
@@ -88,19 +114,22 @@
     , getDeviceDesc
 
     , deviceUSBSpecReleaseNumber
-    , BCD4
     , deviceClass
     , deviceSubClass
     , deviceProtocol
     , deviceMaxPacketSize0
-    , deviceVendorId, VendorId
-    , deviceProductId, ProductId
+    , deviceVendorId
+    , deviceProductId
     , deviceReleaseNumber
     , deviceManufacturerStrIx
     , deviceProductStrIx
     , deviceSerialNumberStrIx
     , deviceNumConfigs
 
+    , BCD4
+
+    , VendorId, ProductId
+
     , ConfigDesc
 
     , getActiveConfigDesc
@@ -109,16 +138,15 @@
 
     , configValue
     , configStrIx
-
     , configAttribs
-    , ConfigAttribs
-    , DeviceStatus(..)
-
     , configMaxPower
     , configNumInterfaces
     , configInterfaces
     , configExtra
 
+    , ConfigAttribs
+    , DeviceStatus(..)
+
     , InterfaceDesc
 
     , interfaceNumber
@@ -134,23 +162,23 @@
     , EndpointDesc
 
     , endpointAddress
+    , endpointAttribs
+    , endpointMaxPacketSize
+    , endpointInterval
+    , endpointRefresh
+    , endpointSynchAddress
+    , endpointExtra
+
     , EndpointAddress(..)
     , TransferDirection(..)
 
-    , endpointAttribs
     , EndpointAttribs
     , TransferType(..)
     , Synchronization(..)
     , Usage(..)
 
-    , endpointMaxPacketSize
     , MaxPacketSize(..)
     , TransactionOpportunities(..)
-
-    , endpointInterval
-    , endpointRefresh
-    , endpointSynchAddress
-    , endpointExtra
 
     , getLanguages
     , LangId, PrimaryLangId, SubLangId
diff --git a/System/USB/DeviceHandlingAndEnumeration.hs b/System/USB/DeviceHandlingAndEnumeration.hs
deleted file mode 100644
--- a/System/USB/DeviceHandlingAndEnumeration.hs
+++ /dev/null
@@ -1,74 +0,0 @@
-module System.USB.DeviceHandlingAndEnumeration
-    ( -- * Enumeration
-      Device
-    , getDevices
-
-    , getBusNumber
-    , getDeviceAddress
-    , getMaxPacketSize
-
-      -- * Opening & closing of devices
-    , DeviceHandle
-    , openDevice
-    , closeDevice
-    , withDeviceHandle
-    , getDevice
-
-      -- * Getting & setting the configuration
-    , ConfigValue
-    , getConfig
-    , setConfig
-
-      -- * Claiming & releasing interfaces
-    , InterfaceNumber
-    , claimInterface
-    , releaseInterface
-    , withInterface
-    , InterfaceAltSetting
-    , setInterfaceAltSetting
-
-      -- * Clearing & Resetting devices
-    , clearHalt
-    , resetDevice
-
-      -- * USB kernel drivers
-    , kernelDriverActive
-    , detachKernelDriver
-    , attachKernelDriver
-    , withDetachedKernelDriver
-    ) where
-
-import System.USB.Internal
-    ( Device
-    , getDevices
-
-    , getBusNumber
-    , getDeviceAddress
-    , getMaxPacketSize
-
-    , DeviceHandle
-    , openDevice
-    , closeDevice
-    , withDeviceHandle
-    , getDevice
-
-    , ConfigValue
-    , getConfig
-    , setConfig
-
-    , InterfaceNumber
-    , claimInterface
-    , releaseInterface
-    , withInterface
-    , InterfaceAltSetting
-    , setInterfaceAltSetting
-
-    , clearHalt
-    , resetDevice
-
-    , kernelDriverActive
-    , detachKernelDriver
-    , attachKernelDriver
-    , withDetachedKernelDriver
-    )
-
diff --git a/System/USB/Devices.hs b/System/USB/Devices.hs
new file mode 100644
--- /dev/null
+++ b/System/USB/Devices.hs
@@ -0,0 +1,92 @@
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  System.USB.Devices
+-- Copyright   :  (c) 2009 Bas van Dijk
+-- License     :  BSD3 (see the file LICENSE)
+-- Maintainer  :  Bas van Dijk <v.dijk.bas@gmail.com>
+--
+-- The functionality documented in this module is designed to help with the
+-- following operations:
+--
+--  * Enumerating the USB devices currently attached to the system.
+--
+--  * Choosing a device to operate from your software.
+--
+--  * Opening and closing the chosen device.
+--
+--------------------------------------------------------------------------------
+
+module System.USB.Devices
+    ( -- * Enumeration
+      Device
+    , getDevices
+
+    , getBusNumber
+    , getDeviceAddress
+    , getMaxPacketSize
+
+      -- * Opening & closing of devices
+    , DeviceHandle
+    , openDevice
+    , closeDevice
+    , withDeviceHandle
+    , getDevice
+
+      -- * Getting & setting the configuration
+    , ConfigValue
+    , getConfig
+    , setConfig
+
+      -- * Claiming & releasing interfaces
+    , InterfaceNumber
+    , claimInterface
+    , releaseInterface
+    , withInterface
+    , InterfaceAltSetting
+    , setInterfaceAltSetting
+
+      -- * Clearing & Resetting devices
+    , clearHalt
+    , resetDevice
+
+      -- * USB kernel drivers
+    , kernelDriverActive
+    , detachKernelDriver
+    , attachKernelDriver
+    , withDetachedKernelDriver
+    ) where
+
+import System.USB.Internal
+    ( Device
+    , getDevices
+
+    , getBusNumber
+    , getDeviceAddress
+    , getMaxPacketSize
+
+    , DeviceHandle
+    , openDevice
+    , closeDevice
+    , withDeviceHandle
+    , getDevice
+
+    , ConfigValue
+    , getConfig
+    , setConfig
+
+    , InterfaceNumber
+    , claimInterface
+    , releaseInterface
+    , withInterface
+    , InterfaceAltSetting
+    , setInterfaceAltSetting
+
+    , clearHalt
+    , resetDevice
+
+    , kernelDriverActive
+    , detachKernelDriver
+    , attachKernelDriver
+    , withDetachedKernelDriver
+    )
+
diff --git a/System/USB/Exceptions.hs b/System/USB/Exceptions.hs
--- a/System/USB/Exceptions.hs
+++ b/System/USB/Exceptions.hs
@@ -1,3 +1,12 @@
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  System.USB.Exceptions
+-- Copyright   :  (c) 2009 Bas van Dijk
+-- License     :  BSD3 (see the file LICENSE)
+-- Maintainer  :  Bas van Dijk <v.dijk.bas@gmail.com>
+--
+--------------------------------------------------------------------------------
+
 module System.USB.Exceptions
     (  USBException(..)
     ) where
@@ -5,4 +14,3 @@
 import System.USB.Internal
     ( USBException(..)
     )
-
diff --git a/System/USB/IO/Synchronous.hs b/System/USB/IO/Synchronous.hs
--- a/System/USB/IO/Synchronous.hs
+++ b/System/USB/IO/Synchronous.hs
@@ -1,3 +1,12 @@
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  System.USB.IO.Synchronous
+-- Copyright   :  (c) 2009 Bas van Dijk
+-- License     :  BSD3 (see the file LICENSE)
+-- Maintainer  :  Bas van Dijk <v.dijk.bas@gmail.com>
+--
+--------------------------------------------------------------------------------
+
 module System.USB.IO.Synchronous
     ( Timeout
     , Size
diff --git a/System/USB/Initialization.hs b/System/USB/Initialization.hs
--- a/System/USB/Initialization.hs
+++ b/System/USB/Initialization.hs
@@ -1,3 +1,12 @@
+--------------------------------------------------------------------------------
+-- |
+-- Module      :  System.USB.Init
+-- Copyright   :  (c) 2009 Bas van Dijk
+-- License     :  BSD3 (see the file LICENSE)
+-- Maintainer  :  Bas van Dijk <v.dijk.bas@gmail.com>
+--
+--------------------------------------------------------------------------------
+
 module System.USB.Initialization
     ( Ctx
     , newCtx
diff --git a/System/USB/Internal.hs b/System/USB/Internal.hs
--- a/System/USB/Internal.hs
+++ b/System/USB/Internal.hs
@@ -59,19 +59,21 @@
 
       -- *** Querying device descriptors
     , deviceUSBSpecReleaseNumber
-    , BCD4
     , deviceClass
     , deviceSubClass
     , deviceProtocol
     , deviceMaxPacketSize0
-    , deviceVendorId, VendorId
-    , deviceProductId, ProductId
+    , deviceVendorId
+    , deviceProductId
     , deviceReleaseNumber
     , deviceManufacturerStrIx
     , deviceProductStrIx
     , deviceSerialNumberStrIx
     , deviceNumConfigs
 
+    , BCD4
+    , VendorId, ProductId
+
       -- ** Configuration descriptor
     , ConfigDesc
 
@@ -82,16 +84,15 @@
       -- *** Querying configuration descriptors
     , configValue
     , configStrIx
-
     , configAttribs
-    , ConfigAttribs
-    , DeviceStatus(..)
-
     , configMaxPower
     , configNumInterfaces
     , configInterfaces
     , configExtra
 
+    , ConfigAttribs
+    , DeviceStatus(..)
+
       -- ** Interface descriptor
     , InterfaceDesc
 
@@ -111,24 +112,24 @@
 
       -- *** Querying endpoint descriptors
     , endpointAddress
+    , endpointAttribs
+    , endpointMaxPacketSize
+    , endpointInterval
+    , endpointRefresh
+    , endpointSynchAddress
+    , endpointExtra
+
     , EndpointAddress(..)
     , TransferDirection(..)
 
-    , endpointAttribs
     , EndpointAttribs
     , TransferType(..)
     , Synchronization(..)
     , Usage(..)
 
-    , endpointMaxPacketSize
     , MaxPacketSize(..)
     , TransactionOpportunities(..)
 
-    , endpointInterval
-    , endpointRefresh
-    , endpointSynchAddress
-    , endpointExtra
-
       -- ** String descriptors
     , getLanguages
     , LangId, PrimaryLangId, SubLangId
@@ -368,11 +369,11 @@
 getMaxPacketSize dev endpoint =
     withDevice dev $ \devPtr -> do
       m <- c'libusb_get_max_packet_size devPtr $
-                                        marshallEndpointAddress endpoint
+                                        marshalEndpointAddress endpoint
       case m of
         n | n == c'LIBUSB_ERROR_NOT_FOUND -> throwIO NotFoundException
           | n == c'LIBUSB_ERROR_OTHER     -> throwIO OtherException
-          | otherwise -> return . convertMaxPacketSize $ fromIntegral n
+          | otherwise -> return . unmarshalMaxPacketSize $ fromIntegral n
 
 
 -- ** Opening & closing of devices ---------------------------------------------
@@ -639,7 +640,7 @@
 clearHalt devHndl
     = handleUSBException
     . c'libusb_clear_halt (devHndlPtr devHndl)
-    . marshallEndpointAddress
+    . marshalEndpointAddress
 
 {-| Perform a USB port reset to reinitialize a device.
 
@@ -817,28 +818,26 @@
                                               --   configurations.
     } deriving (Show, Eq, Data, Typeable)
 
--- | For a database of USB vendors and products see the /usb-id-database/
--- package at: <http://hackage.haskell.org/package/usb-id-database>
 type VendorId  = Word16
 type ProductId = Word16
 
 convertDeviceDesc :: C'libusb_device_descriptor -> DeviceDesc
 convertDeviceDesc d =
     DeviceDesc
-    { deviceUSBSpecReleaseNumber = convertBCD4 $
-                                   libusb_device_descriptor'bcdUSB d
-    , deviceClass                = libusb_device_descriptor'bDeviceClass d
-    , deviceSubClass             = libusb_device_descriptor'bDeviceSubClass d
-    , deviceProtocol             = libusb_device_descriptor'bDeviceProtocol d
-    , deviceMaxPacketSize0       = libusb_device_descriptor'bMaxPacketSize0 d
-    , deviceVendorId             = libusb_device_descriptor'idVendor d
-    , deviceProductId            = libusb_device_descriptor'idProduct d
-    , deviceReleaseNumber        = convertBCD4 $
-                                   libusb_device_descriptor'bcdDevice d
-    , deviceManufacturerStrIx    = libusb_device_descriptor'iManufacturer d
-    , deviceProductStrIx         = libusb_device_descriptor'iProduct d
-    , deviceSerialNumberStrIx    = libusb_device_descriptor'iSerialNumber d
-    , deviceNumConfigs           = libusb_device_descriptor'bNumConfigurations d
+    { deviceUSBSpecReleaseNumber = unmarshalBCD4 $
+                                   c'libusb_device_descriptor'bcdUSB d
+    , deviceClass                = c'libusb_device_descriptor'bDeviceClass d
+    , deviceSubClass             = c'libusb_device_descriptor'bDeviceSubClass d
+    , deviceProtocol             = c'libusb_device_descriptor'bDeviceProtocol d
+    , deviceMaxPacketSize0       = c'libusb_device_descriptor'bMaxPacketSize0 d
+    , deviceVendorId             = c'libusb_device_descriptor'idVendor d
+    , deviceProductId            = c'libusb_device_descriptor'idProduct d
+    , deviceReleaseNumber        = unmarshalBCD4 $
+                                   c'libusb_device_descriptor'bcdDevice d
+    , deviceManufacturerStrIx    = c'libusb_device_descriptor'iManufacturer d
+    , deviceProductStrIx         = c'libusb_device_descriptor'iProduct d
+    , deviceSerialNumberStrIx    = c'libusb_device_descriptor'iSerialNumber d
+    , deviceNumConfigs           = c'libusb_device_descriptor'bNumConfigurations d
     }
 
 {-| Get the USB device descriptor for a given device.
@@ -910,10 +909,11 @@
                            --   device is currently self-powered
     } deriving (Show, Eq, Data, Typeable)
 
-convertConfigAttribs :: Word8 -> ConfigAttribs
-convertConfigAttribs a = DeviceStatus { remoteWakeup = testBit a 5
-                                      , selfPowered  = testBit a 6
-                                      }
+unmarshalConfigAttribs :: Word8 -> ConfigAttribs
+unmarshalConfigAttribs a =
+    DeviceStatus { remoteWakeup = testBit a 5
+                 , selfPowered  = testBit a 6
+                 }
 
 --------------------------------------------------------------------------------
 
@@ -986,23 +986,23 @@
 
 convertConfigDesc :: C'libusb_config_descriptor -> IO ConfigDesc
 convertConfigDesc c = do
-    let numInterfaces = libusb_config_descriptor'bNumInterfaces c
+    let numInterfaces = c'libusb_config_descriptor'bNumInterfaces c
 
     interfaces <- peekArray (fromIntegral numInterfaces)
-                            (libusb_config_descriptor'interface c) >>=
+                            (c'libusb_config_descriptor'interface c) >>=
                   mapM convertInterface
 
     extra <- B.packCStringLen
-               ( castPtr      $ libusb_config_descriptor'extra        c
-               , fromIntegral $ libusb_config_descriptor'extra_length c
+               ( castPtr      $ c'libusb_config_descriptor'extra        c
+               , fromIntegral $ c'libusb_config_descriptor'extra_length c
                )
 
     return ConfigDesc
-      { configValue         = libusb_config_descriptor'bConfigurationValue c
-      , configStrIx         = libusb_config_descriptor'iConfiguration      c
-      , configAttribs       = convertConfigAttribs $
-                              libusb_config_descriptor'bmAttributes        c
-      , configMaxPower      = libusb_config_descriptor'MaxPower            c
+      { configValue         = c'libusb_config_descriptor'bConfigurationValue c
+      , configStrIx         = c'libusb_config_descriptor'iConfiguration      c
+      , configAttribs       = unmarshalConfigAttribs $
+                              c'libusb_config_descriptor'bmAttributes        c
+      , configMaxPower      = c'libusb_config_descriptor'MaxPower            c
       , configNumInterfaces = numInterfaces
       , configInterfaces    = interfaces
       , configExtra         = extra
@@ -1010,8 +1010,8 @@
 
 convertInterface:: C'libusb_interface -> IO [InterfaceDesc]
 convertInterface i =
-    peekArray (fromIntegral $ libusb_interface'num_altsetting i)
-              (libusb_interface'altsetting i) >>=
+    peekArray (fromIntegral $ c'libusb_interface'num_altsetting i)
+              (c'libusb_interface'altsetting i) >>=
     mapM convertInterfaceDesc
 
 
@@ -1067,24 +1067,24 @@
 convertInterfaceDesc :: C'libusb_interface_descriptor
                            -> IO InterfaceDesc
 convertInterfaceDesc i = do
-  let n = libusb_interface_descriptor'bNumEndpoints i
+  let n = c'libusb_interface_descriptor'bNumEndpoints i
 
   endpoints <- peekArray (fromIntegral n)
-                         (libusb_interface_descriptor'endpoint i) >>=
+                         (c'libusb_interface_descriptor'endpoint i) >>=
                mapM convertEndpointDesc
 
   extra <- B.packCStringLen
-             ( castPtr      $ libusb_interface_descriptor'extra        i
-             , fromIntegral $ libusb_interface_descriptor'extra_length i
+             ( castPtr      $ c'libusb_interface_descriptor'extra        i
+             , fromIntegral $ c'libusb_interface_descriptor'extra_length i
              )
 
   return InterfaceDesc
-    { interfaceNumber       = libusb_interface_descriptor'bInterfaceNumber   i
-    , interfaceAltSetting   = libusb_interface_descriptor'bAlternateSetting  i
-    , interfaceClass        = libusb_interface_descriptor'bInterfaceClass    i
-    , interfaceSubClass     = libusb_interface_descriptor'bInterfaceSubClass i
-    , interfaceStrIx        = libusb_interface_descriptor'iInterface         i
-    , interfaceProtocol     = libusb_interface_descriptor'bInterfaceProtocol i
+    { interfaceNumber       = c'libusb_interface_descriptor'bInterfaceNumber   i
+    , interfaceAltSetting   = c'libusb_interface_descriptor'bAlternateSetting  i
+    , interfaceClass        = c'libusb_interface_descriptor'bInterfaceClass    i
+    , interfaceSubClass     = c'libusb_interface_descriptor'bInterfaceSubClass i
+    , interfaceStrIx        = c'libusb_interface_descriptor'iInterface         i
+    , interfaceProtocol     = c'libusb_interface_descriptor'bInterfaceProtocol i
     , interfaceNumEndpoints = n
     , interfaceEndpoints    = endpoints
     , interfaceExtra        = extra
@@ -1134,20 +1134,20 @@
 convertEndpointDesc :: C'libusb_endpoint_descriptor -> IO EndpointDesc
 convertEndpointDesc e = do
   extra <- B.packCStringLen
-             ( castPtr      $ libusb_endpoint_descriptor'extra        e
-             , fromIntegral $ libusb_endpoint_descriptor'extra_length e
+             ( castPtr      $ c'libusb_endpoint_descriptor'extra        e
+             , fromIntegral $ c'libusb_endpoint_descriptor'extra_length e
              )
 
   return EndpointDesc
-    { endpointAddress       = convertEndpointAddress $
-                              libusb_endpoint_descriptor'bEndpointAddress e
-    , endpointAttribs       = convertEndpointAttribs $
-                              libusb_endpoint_descriptor'bmAttributes     e
-    , endpointMaxPacketSize = convertMaxPacketSize $
-                              libusb_endpoint_descriptor'wMaxPacketSize   e
-    , endpointInterval      = libusb_endpoint_descriptor'bInterval        e
-    , endpointRefresh       = libusb_endpoint_descriptor'bRefresh         e
-    , endpointSynchAddress  = libusb_endpoint_descriptor'bSynchAddress    e
+    { endpointAddress       = unmarshalEndpointAddress $
+                              c'libusb_endpoint_descriptor'bEndpointAddress e
+    , endpointAttribs       = unmarshalEndpointAttribs $
+                              c'libusb_endpoint_descriptor'bmAttributes     e
+    , endpointMaxPacketSize = unmarshalMaxPacketSize $
+                              c'libusb_endpoint_descriptor'wMaxPacketSize   e
+    , endpointInterval      = c'libusb_endpoint_descriptor'bInterval        e
+    , endpointRefresh       = c'libusb_endpoint_descriptor'bRefresh         e
+    , endpointSynchAddress  = c'libusb_endpoint_descriptor'bSynchAddress    e
     , endpointExtra         = extra
     }
 
@@ -1158,18 +1158,18 @@
     , endpointDirection :: TransferDirection
     } deriving (Show, Eq, Data, Typeable)
 
-convertEndpointAddress :: Word8 -> EndpointAddress
-convertEndpointAddress a = EndpointAddress (fromIntegral $ bits 0 3 a)
-                                           (if testBit a 7 then In else Out)
+unmarshalEndpointAddress :: Word8 -> EndpointAddress
+unmarshalEndpointAddress a = EndpointAddress (fromIntegral $ bits 0 3 a)
+                                             (if testBit a 7 then In else Out)
 
-marshallEndpointAddress :: EndpointAddress -> CUChar
-marshallEndpointAddress (EndpointAddress number direction)
+marshalEndpointAddress :: EndpointAddress -> CUChar
+marshalEndpointAddress (EndpointAddress number direction)
     | between number 0 15 = let n = fromIntegral number
                             in case direction of
                                  Out -> n
                                  In  -> setBit n 7
     | otherwise =
-        error "marshallEndpointAddress: endpointNumber not >= 0 and <= 15"
+        error "marshalEndpointAddress: endpointNumber not >= 0 and <= 15"
 
 -- | Direction of data transfer relative to the host.
 data TransferDirection = Out -- ^ Host to device.
@@ -1197,15 +1197,15 @@
            | Implicit
              deriving (Enum, Show, Eq, Data, Typeable)
 
-convertEndpointAttribs :: Word8 -> EndpointAttribs
-convertEndpointAttribs a =
+unmarshalEndpointAttribs :: Word8 -> EndpointAttribs
+unmarshalEndpointAttribs a =
     case bits 0 1 a of
       0 -> Control
       1 -> Isochronous (genToEnum $ bits 2 3 a)
                        (genToEnum $ bits 4 5 a)
       2 -> Bulk
       3 -> Interrupt
-      _ -> error "convertEndpointAttribs: this can't happen!"
+      _ -> error "unmarshalEndpointAttribs: this can't happen!"
 
 --------------------------------------------------------------------------------
 
@@ -1219,8 +1219,8 @@
                               | TwoAdditionalTransactions
                                 deriving (Enum, Show, Eq, Data, Typeable)
 
-convertMaxPacketSize :: Word16 -> MaxPacketSize
-convertMaxPacketSize m =
+unmarshalMaxPacketSize :: Word16 -> MaxPacketSize
+unmarshalMaxPacketSize m =
     MaxPacketSize
     { maxPacketSize            = fromIntegral $ bits 0  10 m
     , transactionOpportunities = genToEnum    $ bits 11 12 m
@@ -1238,7 +1238,7 @@
     let maxSize = 255 -- Some devices choke on size > 255
     in allocaArray maxSize $ \dataPtr -> do
       reportedSize <- putStrDesc devHndl 0 0 maxSize dataPtr
-      fmap (fmap convertLangId) $
+      fmap (fmap unmarshalLangId) $
            peekArray ((reportedSize - 2) `div` 2)
                      (castPtr $ dataPtr `plusPtr` 2)
 
@@ -1292,11 +1292,11 @@
 type PrimaryLangId = Word16
 type SubLangId     = Word16
 
-convertLangId :: Word16 -> LangId
-convertLangId = bits 0 9 &&& bits 10 15
+unmarshalLangId :: Word16 -> LangId
+unmarshalLangId = bits 0 9 &&& bits 10 15
 
-marshallLangId :: LangId -> Word16
-marshallLangId (p, s) = p .|. s `shiftL`10
+marshalLangId :: LangId -> Word16
+marshalLangId (p, s) = p .|. s `shiftL`10
 
 -- | Type of indici of string descriptors.
 --
@@ -1317,7 +1317,7 @@
          BI.createAndTrim size $ putStrDesc
                                    devHndl
                                    strIx
-                                   (marshallLangId langId)
+                                   (marshalLangId langId)
                                    size
                                . castPtr
 
@@ -1369,8 +1369,8 @@
                | ToOther
                  deriving (Enum, Show, Eq, Data, Typeable)
 
-marshallRequestType :: RequestType -> Recipient -> Word8
-marshallRequestType t r = genFromEnum t `shiftL` 5 .|. genFromEnum r
+marshalRequestType :: RequestType -> Recipient -> Word8
+marshalRequestType t r = genFromEnum t `shiftL` 5 .|. genFromEnum r
 
 
 -- ** Control transfers --------------------------------------------------------
@@ -1402,7 +1402,7 @@
 control devHndl reqType reqRecipient request value index timeout =
       ignore . checkUSBException $ c'libusb_control_transfer
                                      (devHndlPtr devHndl)
-                                     (marshallRequestType reqType reqRecipient)
+                                     (marshalRequestType reqType reqRecipient)
                                      request
                                      value
                                      index
@@ -1439,7 +1439,7 @@
     BI.createAndTrim size $ \dataPtr ->
         checkUSBException $ c'libusb_control_transfer
                               (devHndlPtr devHndl)
-                              (setBit (marshallRequestType reqType reqRecipient) 7)
+                              (setBit (marshalRequestType reqType reqRecipient) 7)
                               request
                               value
                               index
@@ -1477,7 +1477,7 @@
     input `writeWith` \dataPtr size ->
       checkUSBException $ c'libusb_control_transfer
                             (devHndlPtr devHndl)
-                            (marshallRequestType reqType reqRecipient)
+                            (marshalRequestType reqType reqRecipient)
                             request
                             value
                             index
@@ -1635,7 +1635,7 @@
       alloca $ \transferredPtr -> do
         handleUSBException $ doReadTransfer
                                (devHndlPtr devHndl)
-                               (marshallEndpointAddress endpoint)
+                               (marshalEndpointAddress endpoint)
                                (castPtr dataPtr)
                                (fromIntegral size)
                                transferredPtr
@@ -1653,7 +1653,7 @@
          alloca $ \transferredPtr -> do
            handleUSBException $ doWriteTransfer
                                   (devHndlPtr devHndl)
-                                  (marshallEndpointAddress endpoint)
+                                  (marshalEndpointAddress endpoint)
                                   (castPtr dataPtr)
                                   (fromIntegral size)
                                   transferredPtr
@@ -1737,9 +1737,9 @@
 -- | A decoded 16 bits Binary Coded Decimal using 4 bits for each digit.
 type BCD4 = (Int, Int, Int, Int)
 
-convertBCD4 :: Word16 -> BCD4
-convertBCD4 bcd = let [a, b, c, d] = fmap fromIntegral $ decodeBCD 4 bcd
-                  in (a, b, c, d)
+unmarshalBCD4 :: Word16 -> BCD4
+unmarshalBCD4 bcd = let [a, b, c, d] = fmap fromIntegral $ decodeBCD 4 bcd
+                    in (a, b, c, d)
 
 {-| @decodeBCD bitsInDigit n@ decodes the Binary Coded Decimal @n@ to a list of
 its encoded digits. @bitsInDigit@, which is usually 4, is the number of bits
diff --git a/usb.cabal b/usb.cabal
--- a/usb.cabal
+++ b/usb.cabal
@@ -1,5 +1,5 @@
 name:          usb
-version:       0.1.0.1
+version:       0.2
 cabal-version: >=1.6
 build-type:    Simple
 license:       BSD3
@@ -24,10 +24,10 @@
   build-depends: base            >= 4 && < 4.2
                , bytestring      == 0.9.*
                , text            == 0.4.*
-               , bindings-libusb == 1.2.*
+               , bindings-libusb == 1.3.*
   exposed-modules: System.USB
                      System.USB.Initialization
-                     System.USB.DeviceHandlingAndEnumeration
+                     System.USB.Devices
                      System.USB.Descriptors
                      System.USB.IO.Synchronous
                      System.USB.Exceptions
