diff --git a/Crypto/Cipher/AES.hs b/Crypto/Cipher/AES.hs
--- a/Crypto/Cipher/AES.hs
+++ b/Crypto/Cipher/AES.hs
@@ -55,8 +55,13 @@
 -- | AES Context (pre-processed key)
 newtype AES = AES SecureMem
 
+-- | AES with 128 bit key
 newtype AES128 = AES128 AES
+
+-- | AES with 192 bit key
 newtype AES192 = AES192 AES
+
+-- | AES with 256 bit key
 newtype AES256 = AES256 AES
 
 instance Cipher AES128 where
@@ -128,9 +133,9 @@
 withNewGCMSt :: GCM -> (Ptr GCM -> IO ()) -> IO GCM
 withNewGCMSt (GCM gcmSt) f = withSecureMemCopy gcmSt (f . castPtr) >>= \sm2 -> return (GCM sm2)
 
--- | initialize key
+-- | Initialize a new context with a key
 --
--- rounds need to be 10 / 12 / 14. any other values will cause undefined behavior
+-- Key need to be of length 16, 24 or 32 bytes. any other values will cause undefined behavior
 initAES :: Byteable b => b -> AES
 initAES k
     | len == 16 = initWithRounds 10
@@ -153,7 +158,11 @@
 
 -- | encrypt using Cipher Block Chaining (CBC)
 {-# NOINLINE encryptCBC #-}
-encryptCBC :: Byteable iv => AES -> iv -> ByteString -> ByteString
+encryptCBC :: Byteable iv
+           => AES        -- ^ AES Context
+           -> iv         -- ^ Initial vector
+           -> ByteString -- ^ plaintext
+           -> ByteString -- ^ ciphertext
 encryptCBC = doCBC c_aes_encrypt_cbc
 
 -- | generate a counter mode pad. this is generally xor-ed to an input
@@ -180,10 +189,10 @@
 -- in CTR mode encryption and decryption is the same operation.
 {-# NOINLINE encryptCTR #-}
 encryptCTR :: Byteable iv
-           => AES
-           -> iv
-           -> ByteString
-           -> ByteString
+           => AES        -- ^ AES Context
+           -> iv         -- ^ initial vector, usually representing a 128 bit integer
+           -> ByteString -- ^ plaintext input
+           -> ByteString -- ^ ciphertext output
 encryptCTR ctx iv input
     | len <= 0  = B.empty
     | otherwise = unsafeCreate len doEncrypt
@@ -198,8 +207,8 @@
 -- a tag is also computed.
 {-# NOINLINE encryptGCM #-}
 encryptGCM :: Byteable iv
-           => AES        -- ^ Key
-           -> iv         -- ^ initial vector
+           => AES        -- ^ AES Context
+           -> iv         -- ^ IV initial vector of any size
            -> ByteString -- ^ data to authenticate (AAD)
            -> ByteString -- ^ data to encrypt
            -> (ByteString, AuthTag) -- ^ ciphertext and tag
@@ -210,7 +219,12 @@
 -- the first key is the normal block encryption key
 -- the second key is used for the initial block tweak
 {-# NOINLINE encryptXTS #-}
-encryptXTS :: Byteable iv => (AES,AES) -> iv -> Word32 -> ByteString -> ByteString
+encryptXTS :: Byteable iv
+           => (AES,AES)  -- ^ AES cipher and tweak context
+           -> iv         -- ^ a 128 bits IV, typically a sector or a block offset in XTS
+           -> Word32     -- ^ number of rounds to skip, also seen a 16 byte offset in the sector or block.
+           -> ByteString -- ^ input to encrypt
+           -> ByteString -- ^ output encrypted
 encryptXTS = doXTS c_aes_encrypt_xts
 
 -- | decrypt using Electronic Code Book (ECB)
@@ -226,17 +240,31 @@
 -- | decrypt using Counter mode (CTR).
 --
 -- in CTR mode encryption and decryption is the same operation.
-decryptCTR :: Byteable iv => AES -> iv -> ByteString -> ByteString
+decryptCTR :: Byteable iv
+           => AES        -- ^ AES Context
+           -> iv         -- ^ initial vector, usually representing a 128 bit integer
+           -> ByteString -- ^ ciphertext input
+           -> ByteString -- ^ plaintext output
 decryptCTR = encryptCTR
 
 -- | decrypt using XTS
 {-# NOINLINE decryptXTS #-}
-decryptXTS :: Byteable iv => (AES,AES) -> iv -> Word32 -> ByteString -> ByteString
+decryptXTS :: Byteable iv
+           => (AES,AES)  -- ^ AES cipher and tweak context
+           -> iv         -- ^ a 128 bits IV, typically a sector or a block offset in XTS
+           -> Word32     -- ^ number of rounds to skip, also seen a 16 byte offset in the sector or block.
+           -> ByteString -- ^ input to decrypt
+           -> ByteString -- ^ output decrypted
 decryptXTS = doXTS c_aes_decrypt_xts
 
 -- | decrypt using Galois Counter Mode (GCM)
 {-# NOINLINE decryptGCM #-}
-decryptGCM :: Byteable iv => AES -> iv -> ByteString -> ByteString -> (ByteString, AuthTag)
+decryptGCM :: Byteable iv
+           => AES        -- ^ Key
+           -> iv         -- ^ IV initial vector of any size
+           -> ByteString -- ^ data to authenticate (AAD)
+           -> ByteString -- ^ data to decrypt
+           -> (ByteString, AuthTag) -- ^ plaintext and tag
 decryptGCM = doGCM gcmAppendDecrypt
 
 {-# INLINE doECB #-}
@@ -269,7 +297,11 @@
 {-# INLINE doXTS #-}
 doXTS :: Byteable iv
       => (Ptr b -> Ptr AES -> Ptr AES -> Ptr Word8 -> CUInt -> CString -> CUInt -> IO ())
-      -> (AES, AES) -> iv -> Word32 -> ByteString -> ByteString
+      -> (AES, AES)
+      -> iv
+      -> Word32
+      -> ByteString
+      -> ByteString
 doXTS f (key1,key2) iv spoint input
     | len == 0  = B.empty
     | r /= 0    = error "cannot use with non multiple of block size (yet)"
@@ -279,7 +311,13 @@
         len           = B.length input
 
 {-# INLINE doGCM #-}
-doGCM :: Byteable iv => (AES -> GCM -> ByteString -> (ByteString, GCM)) -> AES -> iv -> ByteString -> ByteString -> (ByteString, AuthTag)
+doGCM :: Byteable iv
+      => (AES -> GCM -> ByteString -> (ByteString, GCM))
+      -> AES
+      -> iv
+      -> ByteString
+      -> ByteString
+      -> (ByteString, AuthTag)
 doGCM f ctx iv aad input = (output, tag)
   where tag             = gcmFinish ctx after 16
         (output, after) = f ctx afterAAD input
diff --git a/cbits/aes.c b/cbits/aes.c
--- a/cbits/aes.c
+++ b/cbits/aes.c
@@ -163,7 +163,7 @@
 #define GET_GCM_ENCRYPT(strength) aes_generic_gcm_encrypt
 #define GET_GCM_DECRYPT(strength) aes_generic_gcm_decrypt
 #define aes_encrypt_block(o,k,i) aes_generic_encrypt_block(o,k,i)
-#define aes_decrypt_block(o,k,i) aes-generic_decrypt_block(o,k,i)
+#define aes_decrypt_block(o,k,i) aes_generic_decrypt_block(o,k,i)
 #endif
 
 #if defined(ARCH_X86) && defined(WITH_AESNI)
diff --git a/cbits/bitfn.h b/cbits/bitfn.h
--- a/cbits/bitfn.h
+++ b/cbits/bitfn.h
@@ -169,6 +169,12 @@
   # include <machine/endian.h>
 #elif defined( BSD ) && ( BSD >= 199103 )
   # include <machine/endian.h>
+#elif defined( __QNXNTO__ ) && defined( __LITTLEENDIAN__ )
+  # define LITTLE_ENDIAN 1234
+  # define BYTE_ORDER    LITTLE_ENDIAN
+#elif defined( __QNXNTO__ ) && defined( __BIGENDIAN__ )
+  # define BIG_ENDIAN 1234
+  # define BYTE_ORDER    BIG_ENDIAN
 #else
   # include <endian.h>
 #endif
diff --git a/cipher-aes.cabal b/cipher-aes.cabal
--- a/cipher-aes.cabal
+++ b/cipher-aes.cabal
@@ -1,5 +1,5 @@
 Name:                cipher-aes
-Version:             0.2.1
+Version:             0.2.2
 Description:
     Fast AES cipher implementation with advanced mode of operations.
     .
