diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,9 @@
+1.8.14 [2025-01-15]
+------
+
+* build with H5_USE_18_API
+* fix compilation with hdf5 from 1.10.0 to 1.14.5
+
 1.8.13 [2024-09-18]
 ------
 
diff --git a/cbits/H5E_inline.c b/cbits/H5E_inline.c
--- a/cbits/H5E_inline.c
+++ b/cbits/H5E_inline.c
@@ -11,9 +11,7 @@
 BC_INLINE_(H5E_FILE,                hid_t)
 BC_INLINE_(H5E_SOHM,                hid_t)
 BC_INLINE_(H5E_SYM,                 hid_t)
-#if H5_VERSION_GE(1,8,11)
 BC_INLINE_(H5E_PLUGIN,              hid_t)
-#endif /* H5_VERSION_GE */
 BC_INLINE_(H5E_VFL,                 hid_t)
 BC_INLINE_(H5E_INTERNAL,            hid_t)
 BC_INLINE_(H5E_BTREE,               hid_t)
@@ -26,9 +24,6 @@
 BC_INLINE_(H5E_RS,                  hid_t)
 BC_INLINE_(H5E_HEAP,                hid_t)
 BC_INLINE_(H5E_OHDR,                hid_t)
-#if !H5_VERSION_GE(1,8,14)
-BC_INLINE_(H5E_ATOM,                hid_t)
-#endif
 BC_INLINE_(H5E_ATTR,                hid_t)
 BC_INLINE_(H5E_NONE_MAJOR,          hid_t)
 BC_INLINE_(H5E_IO,                  hid_t)
@@ -74,9 +69,7 @@
 BC_INLINE_(H5E_CANTSET,             hid_t)
 BC_INLINE_(H5E_DUPCLASS,            hid_t)
 
-#if H5_VERSION_GE(1,8,9)
 BC_INLINE_(H5E_SETDISALLOWED,       hid_t)
-#endif
 
 BC_INLINE_(H5E_CANTMERGE,           hid_t)
 BC_INLINE_(H5E_CANTREVIVE,          hid_t)
@@ -108,9 +101,7 @@
 
 BC_INLINE_(H5E_NONE_MINOR,          hid_t)
 
-#if H5_VERSION_GE(1,8,11)
 BC_INLINE_(H5E_OPENERROR,           hid_t)
-#endif
 
 BC_INLINE_(H5E_FILEEXISTS,          hid_t)
 BC_INLINE_(H5E_FILEOPEN,            hid_t)
@@ -121,10 +112,6 @@
 BC_INLINE_(H5E_BADFILE,             hid_t)
 BC_INLINE_(H5E_TRUNCATED,           hid_t)
 BC_INLINE_(H5E_MOUNT,               hid_t)
-
-#if !H5_VERSION_GE(1,8,14)
-BC_INLINE_(H5E_BADATOM,             hid_t)
-#endif
 BC_INLINE_(H5E_BADGROUP,            hid_t)
 BC_INLINE_(H5E_CANTREGISTER,        hid_t)
 BC_INLINE_(H5E_CANTINC,             hid_t)
diff --git a/hdf5.cabal b/hdf5.cabal
--- a/hdf5.cabal
+++ b/hdf5.cabal
@@ -1,5 +1,5 @@
 name:                   hdf5
-version:                1.8.13
+version:                1.8.14
 stability:              provisional
 
 cabal-version:          >= 1.10
@@ -106,6 +106,7 @@
                       , cbits/H5P_inline.c
                       , cbits/H5T_inline.c
 
+  cc-options:           -DH5_USE_18_API
   include-dirs:         include
 
   build-depends:        base >= 3 && < 5,
diff --git a/include/util.h b/include/util.h
--- a/include/util.h
+++ b/include/util.h
@@ -14,21 +14,6 @@
 #include <H5public.h>
 #include <string.h>
 
-// These version-check macros were introduced in HDF5 1.8.7
-#ifndef H5_VERSION_GE
-#define H5_VERSION_GE(a,b,c)                    \
-    ((H5_VERS_MAJOR > a) || (H5_VERS_MAJOR == a && ( \
-        H5_VERS_MINOR > b || (H5_VERS_MINOR == b && \
-            H5_VERS_RELEASE >= c))))
-#endif
-
-#ifndef H5_VERSION_LE
-#define H5_VERSION_LE(a,b,c)                     \
-    ((H5_VERS_MAJOR < a) || (H5_VERS_MAJOR == a && ( \
-        H5_VERS_MINOR < b || (H5_VERS_MINOR == b && \
-            H5_VERS_RELEASE <= c))))
-#endif
-
 #define signed(t)       ((t)(-1) < 0)
 #define floating(t)     ((t)(int)(t) 1.4 == (t) 1.4)
 #define nbitsof(t)      (sizeof(t) * 8)
@@ -44,11 +29,11 @@
 char *mapstrn(char *s, unsigned n, int (*f)(int)) {
     unsigned i;
     char *t = dupstr(s);
-    
+
     for (i = 0; i < n && t[i] != '\0'; i++) {
         t[i] = f(t[i]);
     }
-    
+
     return t;
 }
 
diff --git a/src/Bindings/HDF5/Dataspace.hsc b/src/Bindings/HDF5/Dataspace.hsc
--- a/src/Bindings/HDF5/Dataspace.hsc
+++ b/src/Bindings/HDF5/Dataspace.hsc
@@ -141,7 +141,7 @@
     withOutByteString $ \buf bufSz ->
         withInOut_ bufSz $ \ioBufSz ->
             withErrorCheck_ $
-            h5s_encode space_id buf ioBufSz
+            h5s_encode1 space_id buf ioBufSz
 
 decodeDataspace :: BS.ByteString -> IO Dataspace
 decodeDataspace bs = BS.unsafeUseAsCString bs $ \buf ->
diff --git a/src/Bindings/HDF5/ErrorCodes.hsc b/src/Bindings/HDF5/ErrorCodes.hsc
--- a/src/Bindings/HDF5/ErrorCodes.hsc
+++ b/src/Bindings/HDF5/ErrorCodes.hsc
@@ -103,9 +103,6 @@
     , (Just RS,         h5e_RS)
     , (Just Heap,       h5e_HEAP)
     , (Just OHDR,       h5e_OHDR)
-#if !H5_VERSION_GE(1,8,14)
-    , (Just Atom,       h5e_ATOM)
-#endif
     , (Just Attr,       h5e_ATTR)
     , (Just IO,         h5e_IO)
     , (Just SList,      h5e_SLIST)
@@ -432,9 +429,6 @@
     , (Just BadFile,            h5e_BADFILE)
     , (Just Truncated,          h5e_TRUNCATED)
     , (Just Mount,              h5e_MOUNT)
-#if !H5_VERSION_GE(1,8,14)
-    , (Just BadAtom,            h5e_BADATOM)
-#endif
     , (Just BadGroup,           h5e_BADGROUP)
     , (Just CantRegister,       h5e_CANTREGISTER)
     , (Just CantInc,            h5e_CANTINC)
diff --git a/src/Bindings/HDF5/File.hsc b/src/Bindings/HDF5/File.hsc
--- a/src/Bindings/HDF5/File.hsc
+++ b/src/Bindings/HDF5/File.hsc
@@ -242,21 +242,15 @@
     , sohmMsgsInfo  :: !IH_Info
     } deriving (Eq, Ord, Read, Show)
 
-readFileInfo :: H5F_info_t -> FileInfo
-#if H5Fget_info_vers == 1
-readFileInfo (H5F_info_t a b (H5_ih_info_t c d)) = FileInfo (HSize a) (HSize b) (IH_Info (HSize c) (HSize d))
-#elif H5Fget_info_vers == 2
-readFileInfo (H5F_info_t _superVersion _superSize superExtSize' _freeVersion _metaSize _totSpace _sohmVersion sohmHdrSize' (H5_ih_info_t c d)) = FileInfo (HSize superExtSize') (HSize sohmHdrSize') (IH_Info (HSize c) (HSize d))
-#else
-#error unknown H5Fget_info_vers
-#endif
+readFileInfo1 :: H5F_info1_t -> FileInfo
+readFileInfo1 (H5F_info1_t a b (H5_ih_info_t c d)) = FileInfo (HSize a) (HSize b) (IH_Info (HSize c) (HSize d))
 
 getFileInfo :: Object obj => obj -> IO FileInfo
 getFileInfo obj =
-    fmap readFileInfo $
+    fmap readFileInfo1 $
         withOut_ $ \info ->
             withErrorCheck $
-                h5f_get_info (hid obj) info
+                h5f_get_info1 (hid obj) info
 
 getFileIntent :: File -> IO [AccFlags]
 getFileIntent (File file_id) =
diff --git a/src/Bindings/HDF5/Link.hsc b/src/Bindings/HDF5/Link.hsc
--- a/src/Bindings/HDF5/Link.hsc
+++ b/src/Bindings/HDF5/Link.hsc
@@ -65,7 +65,6 @@
 import           Bindings.HDF5.PropertyList.LAPL
 import           Bindings.HDF5.PropertyList.LCPL
 import           Bindings.HDF5.Raw.H5
-import           Bindings.HDF5.Raw.H5I
 import           Bindings.HDF5.Raw.H5L
 import           Bindings.HDF5.Raw.H5P
 import           Bindings.HDF5.Raw.Util
@@ -165,9 +164,11 @@
     , linkValSize     :: CSize
     } deriving (Eq, Ord, Read, Show)
 
-#if H5_VERSION_GE(1,12,0)
+#if defined(H5Lget_info_vers)
 
-readLinkInfo :: H5L_info1_t -> LinkInfo
+# if H5Lget_info_vers == 1
+
+readLinkInfo :: H5L_info_t -> LinkInfo
 readLinkInfo i  = LinkInfo
     { linkType          = linkTypeFromCode (h5l_info1_t'type i)
     , linkCOrderValid   = hboolToBool (h5l_info1_t'corder_valid i)
@@ -176,91 +177,18 @@
     , linkValSize       = h5l_info1_t'u'val_size i
     }
 
-getLinkInfo :: Location loc => loc -> BS.ByteString -> Maybe LAPL -> IO LinkInfo
-getLinkInfo loc name lapl =
-    fmap readLinkInfo $
-        withOut_ $ \info ->
-            withErrorCheck_ $
-                BS.useAsCString name $ \cname ->
-                    h5l_get_info1 (hid loc) cname info (maybe h5p_DEFAULT hid lapl)
-
-getSymLinkVal :: Location loc => loc -> BS.ByteString -> Maybe LAPL -> IO BS.ByteString
-getSymLinkVal loc name mb_lapl =
-    BS.useAsCString name $ \cname -> do
-        let lapl = maybe h5p_DEFAULT hid mb_lapl
-        info <- withOut_ $ \info ->
-            withErrorCheck_ $
-                    h5l_get_info1 (hid loc) cname info lapl
-        let n = h5l_info1_t'u'val_size info
-
-        buf <- mallocBytes (fromIntegral n)
-
-        withErrorCheck_ $
-            h5l_get_val (hid loc) cname (OutArray buf) n lapl
-        -- TODO: this will leak memory if an exception is thrown
-
-        BS.packCStringLen (buf, fromIntegral n)
-
-foreign import ccall "wrapper" wrap_H5L_iterate1_t
-    :: (HId_t -> CString -> In H5L_info1_t -> InOut a -> IO HErr_t)
-    -> IO (FunPtr (HId_t -> CString -> In H5L_info1_t -> InOut a -> IO HErr_t))
-
-with_iterate1_t :: (Group -> BS.ByteString -> LinkInfo -> IO HErr_t)
-     -> (H5L_iterate1_t () -> InOut () -> IO HErr_t)
-     -> IO HErr_t
-with_iterate1_t op f = do
-    exception1 <- newIORef Nothing :: IO (IORef (Maybe SomeException))
-
-    op1 <- wrap_H5L_iterate1_t $ \grp name (In link) _opData -> do
-        name1 <- BS.packCString name
-        link1 <- peek link
-        result <- try (op (uncheckedFromHId grp) name1 (readLinkInfo link1))
-        case result of
-            Left exc -> do
-                writeIORef exception1 (Just exc)
-                return maxBound
-            Right x -> return x
-
-    result <- f op1 (InOut nullPtr) `finally` freeHaskellFunPtr op1
-
-    if result == maxBound
-        then do
-            exception2 <- readIORef exception1
-            maybe (return result) throwIO exception2
-
-        else return result
-
--- TODO : It would be nice if we didn't expose HErr_t in these callback functions.
---        Decide whether we want Either or Exceptions.
-iterateLinks :: Location t => t -> IndexType -> IterOrder -> Maybe HSize -> (Group -> BS.ByteString -> LinkInfo -> IO HErr_t) -> IO HSize
-iterateLinks loc indexType order startIndex op =
-    fmap HSize $
-        withInOut_ (maybe 0 hSize startIndex) $ \ioStartIndex ->
-            withErrorCheck_ $
-                with_iterate1_t op $ \iop opData ->
-                    h5l_iterate1 (hid loc) (indexTypeCode indexType) (iterOrderCode order) ioStartIndex iop opData
-
-iterateLinksByName :: Location t => t -> BS.ByteString -> IndexType -> IterOrder -> Maybe HSize -> Maybe LAPL -> (Group -> BS.ByteString -> LinkInfo -> IO HErr_t) -> IO HSize
-iterateLinksByName loc groupName indexType order startIndex lapl op =
-    fmap HSize $
-        withInOut_ (maybe 0 hSize startIndex) $ \ioStartIndex ->
-            withErrorCheck_ $
-                with_iterate1_t op $ \iop opData ->
-                    BS.useAsCString groupName $ \cgroupName ->
-                        h5l_iterate_by_name1 (hid loc) cgroupName (indexTypeCode indexType) (iterOrderCode order) ioStartIndex iop opData (maybe h5p_DEFAULT hid lapl)
+# else
 
-visitLinks :: Location t => t -> IndexType -> IterOrder -> (Group -> BS.ByteString -> LinkInfo -> IO HErr_t) -> IO ()
-visitLinks loc indexType order op =
-    withErrorCheck_ $
-        with_iterate1_t op $ \iop opData ->
-            h5l_visit1 (hid loc) (indexTypeCode indexType) (iterOrderCode order) iop opData
+readLinkInfo :: H5L_info_t -> LinkInfo
+readLinkInfo i  = LinkInfo
+    { linkType          = linkTypeFromCode (h5l_info2_t'type i)
+    , linkCOrderValid   = hboolToBool (h5l_info2_t'corder_valid i)
+    , linkCOrder        = h5l_info2_t'corder i
+    , linkCSet          = cSetFromCode (h5l_info2_t'cset i)
+    , linkValSize       = h5l_info2_t'u'val_size i
+    }
 
-visitLinksByName :: Location t => t -> BS.ByteString -> IndexType -> IterOrder -> Maybe LAPL -> (Group -> BS.ByteString -> LinkInfo -> IO HErr_t) -> IO ()
-visitLinksByName loc groupName indexType order lapl op =
-    withErrorCheck_ $
-        with_iterate1_t op $ \iop opData ->
-            BS.useAsCString groupName $ \cgroupName ->
-                h5l_visit_by_name1 (hid loc) cgroupName (indexTypeCode indexType) (iterOrderCode order) iop opData (maybe h5p_DEFAULT hid lapl)
+# endif
 
 #else
 
@@ -273,6 +201,8 @@
     , linkValSize       = h5l_info_t'u'val_size i
     }
 
+#endif
+
 getLinkInfo :: Location loc => loc -> BS.ByteString -> Maybe LAPL -> IO LinkInfo
 getLinkInfo loc name lapl =
     fmap readLinkInfo $
@@ -288,8 +218,7 @@
         info <- withOut_ $ \info ->
             withErrorCheck_ $
                     h5l_get_info (hid loc) cname info lapl
-
-        let n = h5l_info_t'u'val_size info
+        let n = linkValSize . readLinkInfo $ info
 
         buf <- mallocBytes (fromIntegral n)
 
@@ -299,18 +228,13 @@
 
         BS.packCStringLen (buf, fromIntegral n)
 
-
-foreign import ccall "wrapper" wrap_H5L_iterate_t
-    :: (HId_t -> CString -> In H5L_info_t -> InOut a -> IO HErr_t)
-    -> IO (FunPtr (HId_t -> CString -> In H5L_info_t -> InOut a -> IO HErr_t))
-
 with_iterate_t :: (Group -> BS.ByteString -> LinkInfo -> IO HErr_t)
      -> (H5L_iterate_t () -> InOut () -> IO HErr_t)
      -> IO HErr_t
 with_iterate_t op f = do
     exception1 <- newIORef Nothing :: IO (IORef (Maybe SomeException))
 
-    op1 <- wrap_H5L_iterate_t $ \grp name (In link) _opData -> do
+    op1 <- mk'H5L_iterate_t $ \grp name (In link) _opData -> do
         name1 <- BS.packCString name
         link1 <- peek link
         result <- try (op (uncheckedFromHId grp) name1 (readLinkInfo link1))
@@ -360,5 +284,3 @@
         with_iterate_t op $ \iop opData ->
             BS.useAsCString groupName $ \cgroupName ->
                 h5l_visit_by_name (hid loc) cgroupName (indexTypeCode indexType) (iterOrderCode order) iop opData (maybe h5p_DEFAULT hid lapl)
-
-#endif
diff --git a/src/Bindings/HDF5/Raw/H5.hsc b/src/Bindings/HDF5/Raw/H5.hsc
--- a/src/Bindings/HDF5/Raw/H5.hsc
+++ b/src/Bindings/HDF5/Raw/H5.hsc
@@ -99,12 +99,8 @@
 h5_SIZEOF_HSIZE_T  = #const H5_SIZEOF_HSIZE_T
 h5_SIZEOF_HSSIZE_T = #const H5_SIZEOF_HSSIZE_T
 
-#if H5_VERSION_GE(1,10,0)
-
 hSIZE_UNDEF :: HSize_t
 hSIZE_UNDEF = #const HSIZE_UNDEF
-
-#endif
 
 #newtype haddr_t, Eq, Ord, Num, Bits, Enum, Bounded, Real, Integral
 
diff --git a/src/Bindings/HDF5/Raw/H5AC.hsc b/src/Bindings/HDF5/Raw/H5AC.hsc
--- a/src/Bindings/HDF5/Raw/H5AC.hsc
+++ b/src/Bindings/HDF5/Raw/H5AC.hsc
@@ -348,26 +348,18 @@
 -- This value MUST be consistant across all processes accessing the
 -- file.  This field is ignored unless HDF5 has been compiled for
 -- parallel.
-#if H5_VERSION_GE(1,10,0)
 #field dirty_bytes_threshold,   <size_t>
-#else
-#field dirty_bytes_threshold,   CInt
-#endif
 
-#if H5_VERSION_GE(1,8,6)
 -- |Integer field containing a code indicating the
 -- desired metadata write strategy.  The valid values of this field
 -- are enumerated and discussed below:
 #field metadata_write_strategy, CInt
-#endif
 
 #stoptype
 
 #num H5AC__CURR_CACHE_CONFIG_VERSION
 #num H5AC__MAX_TRACE_FILE_NAME_LEN
 
-#if H5_VERSION_GE(1,8,6)
-
 -- |When 'metadata_write_strategy' is set to this value, only process
 -- zero is allowed to write dirty metadata to disk.  All other
 -- processes must retain dirty metadata until they are informed at
@@ -412,5 +404,3 @@
 -- To avoid possible messages from the past/future, all caches must
 -- wait until all caches are done before leaving the sync point.
 #num H5AC_METADATA_WRITE_STRATEGY__DISTRIBUTED
-
-#endif
diff --git a/src/Bindings/HDF5/Raw/H5D.hsc b/src/Bindings/HDF5/Raw/H5D.hsc
--- a/src/Bindings/HDF5/Raw/H5D.hsc
+++ b/src/Bindings/HDF5/Raw/H5D.hsc
@@ -14,31 +14,16 @@
 import Bindings.HDF5.Raw.H5I
 import Foreign.Ptr.Conventions
 
-#if H5_VERSION_GE(1,8,3)
-
 #num H5D_CHUNK_CACHE_NSLOTS_DEFAULT
 #num H5D_CHUNK_CACHE_NBYTES_DEFAULT
 #num H5D_CHUNK_CACHE_W0_DEFAULT
 
-#endif
-
-#if H5_VERSION_GE(1,10,0)
-
--- |Bit flags for the H5Pset_chunk_opts() and H5Pget_chunk_opts()
-#num H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS
-
-#endif
-
-#if H5_VERSION_GE(1,8,11)
-
 -- |Property names for H5LTDdirect_chunk_write
 #str H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME
 #str H5D_XFER_DIRECT_CHUNK_WRITE_FILTERS_NAME
 #str H5D_XFER_DIRECT_CHUNK_WRITE_OFFSET_NAME
 #str H5D_XFER_DIRECT_CHUNK_WRITE_DATASIZE_NAME
 
-#endif
-
 -- |Values for the H5D_LAYOUT property
 #newtype H5D_layout_t, Eq
 
@@ -53,44 +38,15 @@
 -- |slow and fancy
 #newtype_const H5D_layout_t, H5D_CHUNKED
 
-#if H5_VERSION_GE(1,10,0)
-
--- |actual data is stored in other datasets
-#newtype_const H5D_layout_t, H5D_VIRTUAL
-
-#endif
-
 #num H5D_NLAYOUTS
 
-#if H5_VERSION_GE(1,8,3)
-
 -- |Types of chunk index data structures
 #newtype H5D_chunk_index_t
 
 -- |v1 B-tree index
 #newtype_const H5D_chunk_index_t, H5D_CHUNK_BTREE
 
-#if H5_VERSION_GE(1,10,0)
 
--- |v1 B-tree index (default)
-#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_BTREE
--- |Single Chunk index (cur dims[]=max dims[]=chunk dims[]; filtered & non-filtered)
-#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_SINGLE
--- |Implicit: No Index (H5D_ALLOC_TIME_EARLY, non-filtered, fixed dims)
-#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_NONE
--- |Fixed array (for 0 unlimited dims)
-#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_FARRAY
--- |Extensible array (for 1 unlimited dim)
-#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_EARRAY
--- |v2 B-tree index (for >1 unlimited dims)
-#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_BT2
-
-#num H5D_CHUNK_IDX_NTYPES
-
-#endif
-
-#endif
-
 -- |Values for the space allocation time property
 #newtype H5D_alloc_time_t, Eq
 #newtype_const H5D_alloc_time_t, H5D_ALLOC_TIME_ERROR
@@ -120,20 +76,6 @@
 #newtype_const H5D_fill_value_t, H5D_FILL_VALUE_DEFAULT
 #newtype_const H5D_fill_value_t, H5D_FILL_VALUE_USER_DEFINED
 
-#if H5_VERSION_GE(1,10,0)
-
--- | Values for VDS bounds option
-#newtype H5D_vds_view_t, Eq
-#newtype_const H5D_vds_view_t, H5D_VDS_ERROR
-#newtype_const H5D_vds_view_t, H5D_VDS_FIRST_MISSING
-#newtype_const H5D_vds_view_t, H5D_VDS_LAST_AVAILABLE
-
--- |Callback for H5Pset_append_flush() in a dataset access property list
--- > typedef herr_t (*H5D_append_cb_t)(hid_t dataset_id, hsize_t *cur_dims, void *op_data)
-type H5D_append_cb_t a = FunPtr (HId_t -> Out HSize_t -> InOut a -> IO HErr_t)
-
-#endif
-
 -- |Operator function type for 'h5d_iterate'
 --
 -- Parameters:
@@ -165,8 +107,6 @@
 -- > 				 const hsize_t *point, void *operator_data);
 type H5D_operator_t a b = FunPtr (InOut a -> HId_t -> CUInt -> InArray HSize_t -> InOut b -> IO HErr_t)
 
-#if H5_VERSION_GE(1,8,11)
-
 -- I don't see any documentation for these callback types in the HDF5 distribution
 -- (though I didn't look very hard, it might be there somewhere)
 
@@ -183,8 +123,6 @@
 -- >                                     size_t dst_buf_bytes_used, void *op_data);
 type H5D_gather_func_t a b = FunPtr (InArray a -> CSize -> InOut b -> IO HErr_t)
 
-#endif /* H5_VERSION_GE */
-
 -- |Creates a new dataset named 'name' at 'loc_id', opens the
 -- dataset for access, and associates with that dataset constant
 -- and initial persistent properties including the type of each
@@ -290,7 +228,6 @@
 -- > hid_t H5Dget_create_plist(hid_t dset_id);
 #ccall H5Dget_create_plist, <hid_t> -> IO <hid_t>
 
-#if H5_VERSION_GE(1,8,3)
 -- |Returns a copy of the dataset creation property list of the specified
 -- dataset.
 --
@@ -314,7 +251,6 @@
 --
 -- > hid_t H5Dget_access_plist(hid_t dset_id);
 #ccall H5Dget_access_plist, <hid_t> -> IO <hid_t>
-#endif
 
 -- |Returns the amount of storage that is required for the
 -- dataset. For chunked datasets this is the number of allocated
@@ -474,18 +410,6 @@
 -- > herr_t H5Dset_extent(hid_t dset_id, const hsize_t size[]);
 #ccall H5Dset_extent, <hid_t> -> InArray <hsize_t> -> IO <herr_t>
 
-#if H5_VERSION_GE(1,10,0)
-
--- > H5_DLL herr_t H5Dflush(hid_t dset_id);
-#ccall H5Dflush, <hid_t> -> IO <herr_t>
-
--- > H5_DLL herr_t H5Drefresh(hid_t dset_id);                                
-#ccall H5Drefresh, <hid_t> -> IO <herr_t>
-
-#endif
-
-#if H5_VERSION_GE(1,8,11)
-
 -- |Scatters data provided by the callback op to the
 -- destination buffer dst_buf, where the dimensions of
 -- dst_buf and the selection to be scattered to are specified
@@ -510,8 +434,6 @@
 -- >     size_t dst_buf_size, void *dst_buf, H5D_gather_func_t op, void *op_data);
 #ccall H5Dgather, <hid_t> -> InArray a -> <hid_t> -> <size_t> -> OutArray a -> H5D_gather_func_t a b -> InOut b -> IO <herr_t>
 
-#endif /* H5_VERSION_GE */
-
 -- |Prints various information about a dataset.  This function is not to be
 -- documented in the API at this time.
 --
@@ -520,8 +442,34 @@
 -- > herr_t H5Ddebug(hid_t dset_id);
 #ccall H5Ddebug, <hid_t> -> IO <herr_t>
 
-#if H5_VERSION_GE(1,10,0)
+-- |Bit flags for the H5Pset_chunk_opts() and H5Pget_chunk_opts()
+#num H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS
 
+-- |actual data is stored in other datasets
+#newtype_const H5D_layout_t, H5D_VIRTUAL
+
+-- |v1 B-tree index (default)
+#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_BTREE
+-- |Single Chunk index (cur dims[]=max dims[]=chunk dims[]; filtered & non-filtered)
+#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_SINGLE
+-- |Implicit: No Index (H5D_ALLOC_TIME_EARLY, non-filtered, fixed dims)
+#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_NONE
+-- |Fixed array (for 0 unlimited dims)
+#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_FARRAY
+-- |Extensible array (for 1 unlimited dim)
+#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_EARRAY
+-- |v2 B-tree index (for >1 unlimited dims)
+#newtype_const H5D_chunk_index_t, H5D_CHUNK_IDX_BT2
+
+#num H5D_CHUNK_IDX_NTYPES
+
+-- | Values for VDS bounds option
+#newtype H5D_vds_view_t, Eq
+#newtype_const H5D_vds_view_t, H5D_VDS_ERROR
+#newtype_const H5D_vds_view_t, H5D_VDS_FIRST_MISSING
+#newtype_const H5D_vds_view_t, H5D_VDS_LAST_AVAILABLE
+
+
 -- |Internal API routines
 -- > H5_DLL herr_t H5Dformat_convert(hid_t dset_id);
 #ccall H5Dformat_convert, <hid_t> -> IO <herr_t>
@@ -529,7 +477,15 @@
 -- > H5_DLL herr_t H5Dget_chunk_index_type(hid_t did, H5D_chunk_index_t *idx_type);
 #ccall H5Dget_chunk_index_type, <hid_t> -> IO H5D_chunk_index_t
 
-#endif
+-- |Callback for H5Pset_append_flush() in a dataset access property list
+-- > typedef herr_t (*H5D_append_cb_t)(hid_t dataset_id, hsize_t *cur_dims, void *op_data)
+type H5D_append_cb_t a = FunPtr (HId_t -> Out HSize_t -> InOut a -> IO HErr_t)
+
+-- > H5_DLL herr_t H5Dflush(hid_t dset_id);
+#ccall H5Dflush, <hid_t> -> IO <herr_t>
+
+-- > H5_DLL herr_t H5Drefresh(hid_t dset_id);
+#ccall H5Drefresh, <hid_t> -> IO <herr_t>
 
 #ifndef H5_NO_DEPRECATED_SYMBOLS
 
diff --git a/src/Bindings/HDF5/Raw/H5E.hsc b/src/Bindings/HDF5/Raw/H5E.hsc
--- a/src/Bindings/HDF5/Raw/H5E.hsc
+++ b/src/Bindings/HDF5/Raw/H5E.hsc
@@ -74,13 +74,9 @@
 -- |Symbol table
 #cinline H5E_SYM,               <hid_t>
 
-#if H5_VERSION_GE(1,8,11)
-
 -- |Plugin for dynamically loaded library
 #cinline H5E_PLUGIN,            <hid_t>
 
-#endif /* H5_VERSION_GE */
-
 -- |Virtual File Layer
 #cinline H5E_VFL,               <hid_t>
 
@@ -117,11 +113,6 @@
 -- |Object header
 #cinline H5E_OHDR,              <hid_t>
 
--- |Object atom
-#if !H5_VERSION_GE(1,8,14)
-#cinline H5E_ATOM,              <hid_t>
-#endif
-
 -- |Attribute
 #cinline H5E_ATTR,              <hid_t>
 
@@ -227,9 +218,7 @@
 #cinline H5E_CANTSET,           <hid_t>
 #cinline H5E_DUPCLASS,          <hid_t>
 
-#if H5_VERSION_GE(1,8,9)
 #cinline H5E_SETDISALLOWED,     <hid_t>
-#endif
 
 -- ** Free space errors
 #cinline H5E_CANTMERGE,         <hid_t>
@@ -267,13 +256,9 @@
 -- ** No error
 #cinline H5E_NONE_MINOR,        <hid_t>
 
-#if H5_VERSION_GE(1,8,11)
-
 -- ** Plugin errors
 #cinline H5E_OPENERROR,         <hid_t>
 
-#endif /* H5_VERSION_GE */
-
 -- ** File accessibility errors
 #cinline H5E_FILEEXISTS,        <hid_t>
 #cinline H5E_FILEOPEN,          <hid_t>
@@ -286,9 +271,6 @@
 #cinline H5E_MOUNT,             <hid_t>
 
 -- ** Object atom related errors
-#if !H5_VERSION_GE(1,8,14)
-#cinline H5E_BADATOM,           <hid_t>
-#endif
 #cinline H5E_BADGROUP,          <hid_t>
 #cinline H5E_CANTREGISTER,      <hid_t>
 #cinline H5E_CANTINC,           <hid_t>
diff --git a/src/Bindings/HDF5/Raw/H5F.hsc b/src/Bindings/HDF5/Raw/H5F.hsc
--- a/src/Bindings/HDF5/Raw/H5F.hsc
+++ b/src/Bindings/HDF5/Raw/H5F.hsc
@@ -45,30 +45,10 @@
 -- |create non-existing files
 #num H5F_ACC_CREAT
 
-#if H5_VERSION_GE(1,10,0)
-
--- |indicate that this file is open for writing in a
--- single-writer/multi-reader (SWMR) scenario.  Note that the
--- process(es) opening the file for reading must open the file with
--- RDONLY access, and use the special "SWMR_READ" access flag.
-#num H5F_ACC_SWMR_WRITE
-
--- |indicate that this file is open for reading in a
--- single-writer/multi-reader (SWMR) scenario.  Note that the
--- process(es) opening the file for SWMR reading must also open the
--- file with the RDONLY flag.  */
-#num H5F_ACC_SWMR_READ
-
-#endif
-
-#if H5_VERSION_GE(1,8,3)
-
 -- |Value passed to 'h5p_set_elink_acc_flags' to cause flags to be taken from the
 -- parent file.
 #num H5F_ACC_DEFAULT
 
-#endif
-
 -- ** Flags for 'h5f_get_obj_count' and 'h5f_get_obj_ids' calls
 
 -- |File objects
@@ -131,8 +111,6 @@
 #newtype_const H5F_close_degree_t, H5F_CLOSE_STRONG
 
 
-#if H5_VERSION_GE(1,8,4)
-
 -- |Types of allocation requests. The values larger than 'h5fd_MEM_DEFAULT'
 -- should not change other than adding new types to the end. These numbers
 -- might appear in files.
@@ -160,23 +138,7 @@
 -- |Sentinel value - must be last
 #num H5FD_MEM_NTYPES
 
-#endif
 
-#if H5_VERSION_GE(1,10,0)
-
--- |Free space section information
-#starttype H5F_sect_info_t
-
--- |Address of free space section
-#field addr, <haddr_t>
-
--- |Size of free space section
-#field size, <hsize_t>
-
-#stoptype
-
-#endif
- 
 -- |Library's file format versions
 #newtype H5F_libver_t
 
@@ -186,54 +148,6 @@
 -- |Use the latest possible format available for storing objects
 #newtype_const H5F_libver_t, H5F_LIBVER_LATEST
 
-#if H5_VERSION_GE(1,8,6) && H5_VERSION_LE(1,8,16)
-
--- |Use version 1.8 format for storing objects
-#newtype_const H5F_libver_t, H5F_LIBVER_18
-
-#endif
-
-#if H5_VERSION_GE(1,10,0)
-
--- |File space handling strategy
-#newtype H5F_file_space_type_t, Eq
-
--- |Default (or current) free space strategy setting
-#newtype_const H5F_file_space_type_t, H5F_FILE_SPACE_DEFAULT
-
--- |Persistent free space managers, aggregators, virtual file driver
-#newtype_const H5F_file_space_type_t, H5F_FILE_SPACE_ALL_PERSIST
-
--- |Non-persistent free space managers, aggregators, virtual file driver
--- This is the library default
-#newtype_const H5F_file_space_type_t, H5F_FILE_SPACE_ALL
-
--- |Aggregators, Virtual file driver
-#newtype_const H5F_file_space_type_t, H5F_FILE_SPACE_AGGR_VFD
-
--- |Virtual file driver
-#newtype_const H5F_file_space_type_t, H5F_FILE_SPACE_VFD
-
-#num H5F_FILE_SPACE_NTYPES
-
--- | Data structure to report the collection of read retries for metadata items with checksum
--- Used by public routine H5Fget_metadata_read_retry_info()
--- TODO check the retries static array
-#num H5F_NUM_METADATA_READ_RETRY_TYPES
-
-#starttype H5F_retry_info_t
-#field nbins, CUInt
-#field retries, Ptr Word32
-#stoptype 
-
--- |Callback for H5Pset_object_flush_cb() in a file access property list
--- > typedef herr_t (*H5F_flush_cb_t)(hid_t object_id, void *udata);
-
-type H5F_flush_cb_t a = FunPtr (HId_t -> InOut a -> IO HErr_t)
-
-#endif
-
-
 -- * Public functions
 
 -- |Check the file signature to detect an HDF5 file.
@@ -406,8 +320,6 @@
 -- > herr_t H5Fget_filesize(hid_t file_id, hsize_t *size);
 #ccall H5Fget_filesize, <hid_t> -> Out <hsize_t> -> IO <herr_t>
 
-#if H5_VERSION_GE(1,8,9)
-
 -- |If a buffer is provided (via the buf_ptr argument) and is
 -- big enough (size in buf_len argument), load *buf_ptr with
 -- an image of the open file whose ID is provided in the
@@ -444,8 +356,6 @@
 -- > ssize_t H5Fget_file_image(hid_t file_id, void * buf_ptr, size_t buf_len);
 #ccall H5Fget_file_image, <hid_t> -> InArray a -> <size_t> -> IO <ssize_t>
 
-#endif
-
 -- |Retrieves the current automatic cache resize configuration
 -- from the metadata cache, and return it in 'config_ptr'.
 --
@@ -533,26 +443,6 @@
 --
 -- Returns non-negative on success, negative on failure
 --
-#if H5_VERSION_GE(1,10,0)
-
-#if H5Fget_info_vers == 2
--- > herr_t H5Fget_info2(hid_t obj_id, H5F_info2_t *bh_info);
-#ccall H5Fget_info2, <hid_t> -> Out H5F_info_t -> IO <herr_t>
-#endif
-
--- > herr_t H5Fget_metadata_read_retry_info(hid_t file_id, H5F_retry_info_t *info);
-#ccall H5Fget_metadata_read_retry_info, <hid_t> -> Out H5F_retry_info_t -> IO <herr_t>
-
--- > herr_t H5Fstart_swmr_write(hid_t file_id);
-#ccall H5Fstart_swmr_write, <hid_t> -> IO <herr_t>
-
--- > ssize_t H5Fget_free_sections(hid_t file_id, H5F_mem_t type,
--- >    size_t nsects, H5F_sect_info_t *sect_info/*out*/);
-#ccall H5Fget_free_sections, <hid_t> -> <H5F_mem_t> -> <size_t> -> Out H5F_sect_info_t -> IO <ssize_t>
-
-#endif
-
-#if H5_VERSION_GE(1,8,7)
 -- |Releases the external file cache associated with the
 -- provided file, potentially closing any cached files
 -- unless they are held open from somewhere else.
@@ -561,30 +451,8 @@
 --
 -- > herr_t H5Fclear_elink_file_cache(hid_t file_id);
 #ccall H5Fclear_elink_file_cache, <hid_t> -> IO <herr_t>
-#endif
 
-#if H5_VERSION_GE(1,10,0)
-
--- > herr_t H5Fstart_mdc_logging(hid_t file_id);
-#ccall H5Fstart_mdc_logging, <hid_t> -> IO <herr_t>
-
--- > herr_t H5Fstop_mdc_logging(hid_t file_id);
-#ccall H5Fstop_mdc_logging, <hid_t> -> IO <herr_t>
-
--- > herr_t H5Fget_mdc_logging_status(hid_t file_id,
--- >                                  /*OUT*/ hbool_t *is_enabled,
--- >                                  /*OUT*/ hbool_t *is_currently_logging);
-#ccall H5Fget_mdc_logging_status, <hid_t> -> Out hbool_t -> Out hbool_t -> IO <herr_t>
-
--- > herr_t H5Fformat_convert(hid_t fid);
-#ccall H5Fformat_convert, <hid_t> -> IO <herr_t>
-
--- > herr_t H5Fget_info1(hid_t obj_id, H5F_info1_t *bh_info);
-#ccall H5Fget_info1, <hid_t> -> Out H5F_info1_t -> IO <herr_t>
-
-#endif
-
-#if H5_VERSION_GE(1,8,9) && H5_HAVE_PARALLEL
+#if H5_HAVE_PARALLEL
 
 -- |Sets the atomicity mode
 --
@@ -600,96 +468,120 @@
 
 #endif
 
+-- |indicate that this file is open for writing in a
+-- single-writer/multi-reader (SWMR) scenario.  Note that the
+-- process(es) opening the file for reading must open the file with
+-- RDONLY access, and use the special "SWMR_READ" access flag.
+#num H5F_ACC_SWMR_WRITE
 
-#if H5_VERSION_GE(1,10,0) && !H5_NO_DEPRECATED_SYMBOLS
+-- |indicate that this file is open for reading in a
+-- single-writer/multi-reader (SWMR) scenario.  Note that the
+-- process(es) opening the file for SWMR reading must also open the
+-- file with the RDONLY flag.  */
+#num H5F_ACC_SWMR_READ
 
--- |Current "global" information about file
--- (just size info currently)
 #starttype H5F_info1_t
-
--- |Superblock extension size
 #field super_ext_size,  <hsize_t>
-
--- |Shared object header message header size
 #field sohm.hdr_size,   <hsize_t>
-
--- |Shared object header message index & heap size
 #field sohm.msgs_info,  <H5_ih_info_t>
 #stoptype
 
-#endif
-
--- #if (H5_VERSION_GE(1,10,0) && (H5Fget_info_vers == 1)) || H5_VERSION_LE(1,8,18)
-#if H5Fget_info_vers == 1
+#starttype H5F_info2_t
+#field super.version,  CUInt
+#field super.super_size, <hsize_t>
+#field super.super_ext_size, <hsize_t>
+#field free.version, CUInt
+#field free.meta_size, <hsize_t>
+#field free.tot_space, <hsize_t>
+#field sohm.version, CUInt
+#field sohm.hdr_size, <hsize_t>
+#field sohm.msgs_info, <H5_ih_info_t>
+#stoptype
 
--- |Current "global" information about file
--- (just size info currently)
-#starttype H5F_info_t
+-- |Free space section information
+#starttype H5F_sect_info_t
 
--- |Superblock extension size
-#field super_ext_size,  <hsize_t>
+-- |Address of free space section
+#field addr, <haddr_t>
 
--- |Shared object header message header size
-#field sohm.hdr_size,   <hsize_t>
+-- |Size of free space section
+#field size, <hsize_t>
 
--- |Shared object header message index & heap size
-#field sohm.msgs_info,  <H5_ih_info_t>
- 
 #stoptype
 
-#elif H5Fget_info_vers == 2
+-- |File space handling strategy
+#newtype H5F_file_space_type_t, Eq
 
--- |Current "global" information about file
--- (just size info currently)
-#starttype H5F_info_t
+-- |Default (or current) free space strategy setting
+#newtype_const H5F_file_space_type_t, H5F_FILE_SPACE_DEFAULT
 
--- |Superblock version
-#field super.version,  CUInt
+-- |Persistent free space managers, aggregators, virtual file driver
+#newtype_const H5F_file_space_type_t, H5F_FILE_SPACE_ALL_PERSIST
 
--- |Superblock size
-#field super.super_size, <hsize_t>
+-- |Non-persistent free space managers, aggregators, virtual file driver
+-- This is the library default
+#newtype_const H5F_file_space_type_t, H5F_FILE_SPACE_ALL
 
--- |Superblock extension size
-#field super.super_ext_size, <hsize_t>
+-- |Aggregators, Virtual file driver
+#newtype_const H5F_file_space_type_t, H5F_FILE_SPACE_AGGR_VFD
 
--- |Version # of file free space management
-#field free.version, CUInt
+-- |Virtual file driver
+#newtype_const H5F_file_space_type_t, H5F_FILE_SPACE_VFD
 
--- |Free space manager metadata size
-#field free.meta_size, <hsize_t>
+#num H5F_FILE_SPACE_NTYPES
 
--- |Amount of free space in the file
-#field free.tot_space, <hsize_t>
+-- | Data structure to report the collection of read retries for metadata items with checksum
+-- Used by public routine H5Fget_metadata_read_retry_info()
+-- TODO check the retries static array
+#num H5F_NUM_METADATA_READ_RETRY_TYPES
 
--- |Version # of shared object header info
-#field sohm.version, CUInt
+#starttype H5F_retry_info_t
+#field nbins, CUInt
+#field retries, Ptr Word32
+#stoptype
 
--- |Shared object header message header size
-#field sohm.hdr_size, <hsize_t>
+type H5F_flush_cb_t a = FunPtr (HId_t -> InOut a -> IO HErr_t)
 
--- |Shared object header message index & heap size
-#field sohm.msgs_info, <H5_ih_info_t>
+#ccall H5Fformat_convert, <hid_t> -> IO <herr_t>
+#ccall H5Fget_mdc_logging_status, <hid_t> -> Out hbool_t -> Out hbool_t -> IO <herr_t>
+#ccall H5Fget_metadata_read_retry_info, <hid_t> -> Out H5F_retry_info_t -> IO <herr_t>
+#ccall H5Fget_free_sections, <hid_t> -> <H5F_mem_t> -> <size_t> -> Out H5F_sect_info_t -> IO <ssize_t>
+#ccall H5Fstart_mdc_logging, <hid_t> -> IO <herr_t>
+#ccall H5Fstart_swmr_write, <hid_t> -> IO <herr_t>
+#ccall H5Fstop_mdc_logging, <hid_t> -> IO <herr_t>
 
-#stoptype
 
-type H5F_info2_t = H5F_info_t
+--------------------------
+-- Compatibility macros --
+--------------------------
 
-#else
 
-#error unknown H5Fget_info_vers
+-- H5F_info_t
 
+#if H5Fget_info_vers == 1
+#synonym_t H5F_info_t, <H5F_info1_t>
+#elif H5Fget_info_vers == 2
+#synonym_t H5F_info_t, <H5F_info2_t>
+#else
+# error TODO
 #endif
 
+-- H5Fget_info
 
-#if H5_VERSION_GE(1,8,10)
-#if (H5Fget_info_vers == 1)
-foreign import ccall unsafe "H5Fget_info1" h5f_get_info
-#else
-foreign import ccall unsafe "H5Fget_info2" h5f_get_info
-#endif
+#if defined(H5Fget_info_vers)
+# ccall H5Fget_info1, <hid_t> -> Out H5F_info1_t -> IO <herr_t>
+# ccall H5Fget_info2, <hid_t> -> Out H5F_info2_t -> IO <herr_t>
+# if H5Fget_info_vers == 1
+h5f_get_info :: HId_t -> Out H5F_info1_t -> IO HErr_t
+h5f_get_info = h5f_get_info1
+# elif H5Fget_info_vers == 2
+h5f_get_info :: HId_t -> Out H5F_info2_t -> IO HErr_t
+h5f_get_info = h5f_get_info2
+# else
+#  error TODO
+# endif
 #else
-foreign import ccall unsafe "H5Fget_info" h5f_get_info
+# ccall H5Fget_info, <hid_t> -> Out H5F_info_t -> IO <herr_t>
+h5f_get_info1 :: HId_t -> Out H5F_info_t -> IO HErr_t
+h5f_get_info1 = h5f_get_info
 #endif
-  :: HId_t -> Out H5F_info_t -> IO HErr_t
-
-
diff --git a/src/Bindings/HDF5/Raw/H5FD.hsc b/src/Bindings/HDF5/Raw/H5FD.hsc
--- a/src/Bindings/HDF5/Raw/H5FD.hsc
+++ b/src/Bindings/HDF5/Raw/H5FD.hsc
@@ -26,132 +26,46 @@
 -- |Default VFL driver value
 #newtype_const hid_t, H5FD_VFD_DEFAULT
 
-#if H5_VERSION_GE(1,8,4)
-
 -- |Types of allocation requests: see "Bindings.HDF5.Raw.H5F"
 type H5FD_mem_t = H5F_mem_t
 
-#else
-
-#newtype H5FD_mem_t, Eq
-
-#newtype_const H5FD_mem_t, H5FD_MEM_NOLIST
-#newtype_const H5FD_mem_t, H5FD_MEM_DEFAULT
-
-#if H5_VERSION_LE(1,8,9)
-#newtype_const H5FD_mem_t, H5FD_MEM_SUPER
-#endif
-
-#newtype_const H5FD_mem_t, H5FD_MEM_BTREE
-#newtype_const H5FD_mem_t, H5FD_MEM_DRAW
-#newtype_const H5FD_mem_t, H5FD_MEM_GHEAP
-#newtype_const H5FD_mem_t, H5FD_MEM_LHEAP
-#newtype_const H5FD_mem_t, H5FD_MEM_OHDR
-
-#endif
-
 -- |Map "fractal heap" header blocks to 'ohdr' type file memory, since its
 -- a fair amount of work to add a new kind of file memory and they are similar
 -- enough to object headers and probably too minor to deserve their own type.
-#if H5_VERSION_GE(1,8,4)
 #newtype_const H5F_mem_t, H5FD_MEM_FHEAP_HDR
-#else
-#newtype_const H5FD_mem_t, H5FD_MEM_FHEAP_HDR
-#endif
 
 -- |Map "fractal heap" indirect blocks to 'ohdr' type file memory, since they
 -- are similar to fractal heap header blocks.
-#if H5_VERSION_GE(1,8,4)
 #newtype_const H5F_mem_t, H5FD_MEM_FHEAP_IBLOCK
-#else
-#newtype_const H5FD_mem_t, H5FD_MEM_FHEAP_IBLOCK
-#endif
 
 -- |Map "fractal heap" direct blocks to 'lheap' type file memory, since they
 -- will be replacing local heaps.
-#if H5_VERSION_GE(1,8,4)
 #newtype_const H5F_mem_t, H5FD_MEM_FHEAP_DBLOCK
-#else
-#newtype_const H5FD_mem_t, H5FD_MEM_FHEAP_DBLOCK
-#endif
 
 -- |Map "fractal heap" 'huge' objects to 'draw' type file memory, since they
 -- represent large objects that are directly stored in the file.
-#if H5_VERSION_GE(1,8,4)
 #newtype_const H5F_mem_t, H5FD_MEM_FHEAP_HUGE_OBJ
-#else
-#newtype_const H5FD_mem_t, H5FD_MEM_FHEAP_HUGE_OBJ
-#endif
 
 -- |Map "free space" header blocks to 'ohdr' type file memory, since its
 -- a fair amount of work to add a new kind of file memory and they are similar
 -- enough to object headers and probably too minor to deserve their own type.
-#if H5_VERSION_GE(1,8,4)
 #newtype_const H5F_mem_t, H5FD_MEM_FSPACE_HDR
-#else
-#newtype_const H5FD_mem_t, H5FD_MEM_FSPACE_HDR
-#endif
 
 -- |Map "free space" serialized sections to 'lheap' type file memory, since they
 -- are similar enough to local heap info.
-#if H5_VERSION_GE(1,8,4)
 #newtype_const H5F_mem_t, H5FD_MEM_FSPACE_SINFO
-#else
-#newtype_const H5FD_mem_t, H5FD_MEM_FSPACE_SINFO
-#endif
 
 -- |Map "shared object header message" master table to 'ohdr' type file memory,
 -- since its a fair amount of work to add a new kind of file memory and they are
 -- similar enough to object headers and probably too minor to deserve their own
 -- type.
-#if H5_VERSION_GE(1,8,4)
 #newtype_const H5F_mem_t, H5FD_MEM_SOHM_TABLE
-#else
-#newtype_const H5FD_mem_t, H5FD_MEM_SOHM_TABLE
-#endif
 
 -- |Map "shared object header message" indices to 'btree' type file memory,
 -- since they are similar enough to B-tree nodes.
-#if H5_VERSION_GE(1,8,4)
 #newtype_const H5F_mem_t, H5FD_MEM_SOHM_INDEX
-#else
-#newtype_const H5FD_mem_t, H5FD_MEM_SOHM_INDEX
-#endif
 
-#if H5_VERSION_GE(1,10,0)
--- |Map "extensible array" header blocks to 'ohdr' type file memory, since its
--- a fair amount of work to add a new kind of file memory and they are similar
--- enough to object headers and probably too minor to deserve their own type.
---
--- Map "extensible array" index blocks to 'ohdr' type file memory, since they
--- are similar to extensible array header blocks.
---
--- Map "extensible array" super blocks to 'btree' type file memory, since they
--- are similar enough to B-tree nodes.
---
--- Map "extensible array" data blocks & pages to 'lheap' type file memory, since
--- they are similar enough to local heap info.
 
-#newtype_const H5F_mem_t, H5FD_MEM_EARRAY_HDR
-#newtype_const H5F_mem_t, H5FD_MEM_EARRAY_IBLOCK
-#newtype_const H5F_mem_t, H5FD_MEM_EARRAY_SBLOCK
-#newtype_const H5F_mem_t, H5FD_MEM_EARRAY_DBLOCK
-#newtype_const H5F_mem_t, H5FD_MEM_EARRAY_DBLK_PAGE
-
--- |Map "fixed array" header blocks to 'ohdr' type file memory, since its
--- a fair amount of work to add a new kind of file memory and they are similar
--- enough to object headers and probably too minor to deserve their own type.
---
--- Map "fixed array" data blocks & pages to 'lheap' type file memory, since
--- they are similar enough to local heap info.
-
-
-#newtype_const H5F_mem_t, H5FD_MEM_FARRAY_HDR
-#newtype_const H5F_mem_t, H5FD_MEM_FARRAY_DBLOCK
-#newtype_const H5F_mem_t, H5FD_MEM_FARRAY_DBLK_PAGE
-
-#endif
-
 -- Array initializers: pass a buffer and the size of that buffer (in bytes)
 -- and it will be filled as prescribed by the corresponding array-literal macro.
 --
@@ -208,36 +122,23 @@
 -- and then sub-allocate \"small\" raw data requests from that larger block.
 #num H5FD_FEAT_AGGREGATE_SMALLDATA
 
-#if H5_VERSION_GE(1,8,4)
-
 -- |Defining 'h5fd_FEAT_IGNORE_DRVRINFO' for a VFL driver means that
 -- the library will ignore the driver info that is encoded in the file
 -- for the VFL driver.  (This will cause the driver info to be eliminated
 -- from the file when it is flushed/closed, if the file is opened R/W).
 #num H5FD_FEAT_IGNORE_DRVRINFO
 
-#if H5_VERSION_LE(1,8,16)
 -- |Defining 'h5fd_FEAT_DIRTY_SBLK_LOAD' for a VFL driver means that
 -- the library will mark the superblock dirty when the file is opened
 -- R/W.  This will cause the driver info to be re-encoded when the file
 -- is flushed/closed.
-#num H5FD_FEAT_DIRTY_SBLK_LOAD
-
-#endif
-
-#endif
-
-#if H5_VERSION_GE(1,8,5)
+#num H5FD_FEAT_DIRTY_DRVRINFO_LOAD
 
 -- |Defining 'h5fd_FEAT_POSIX_COMPAT_HANDLE' for a VFL driver means that
 -- the handle for the VFD (returned with the 'get_handle' callback) is
 -- of type 'int' and is compatible with POSIX I/O calls.
 #num H5FD_FEAT_POSIX_COMPAT_HANDLE
 
-#endif
-
-#if H5_VERSION_GE(1,8,9)
-
 -- |Defining 'H5FD_FEAT_ALLOW_FILE_IMAGE' for a VFL driver means that
 -- the driver is able to use a file image in the fapl as the initial
 -- contents of a file.
@@ -248,25 +149,12 @@
 -- image to store in memory.
 #num H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS
 
-#endif
-
-#if H5_VERSION_GE(1,10,0)
-
--- |Defining 'H5FD_FEAT_SUPPORTS_SWMR_IO' for a VFL driver means that the
--- driver supports the single-writer/multiple-readers I/O pattern.
-
-#num H5FD_FEAT_SUPPORTS_SWMR_IO
-
-#endif
-
 -- |Class information for each file driver
 #starttype H5FD_class_t
 #field name,            CString
 #field maxaddr,         <haddr_t>
 #field fc_degree,       <H5F_close_degree_t>
-#if H5_VERSION_GE(1,10,0)
 #field terminate,       FunPtr (IO <herr_t>)
-#endif
 #field sb_size,         FunPtr (In H5FD_t -> IO <hsize_t>)
 #field sb_encode,       FunPtr (In H5FD_t -> OutArray CChar -> Out CUChar -> IO <herr_t>)
 #field sb_decode,       FunPtr (In H5FD_t -> CString -> In CUChar -> IO <herr_t>)
@@ -281,39 +169,19 @@
 #field close,           FunPtr (In <H5FD_t> -> IO <herr_t>)
 #field cmp,             FunPtr (In <H5FD_t> -> In <H5FD_t> -> IO CInt)
 #field query,           FunPtr (In <H5FD_t> -> Ptr CULong -> IO <herr_t>)
-
-#if H5_VERSION_GE(1,8,2)
 #field get_type_map,    FunPtr (In <H5FD_t> -> Out <H5FD_mem_t> -> IO <herr_t>)
-#endif
-
 #field alloc,           FunPtr (In <H5FD_t> -> <H5FD_mem_t> -> <hid_t> -> <hsize_t> -> IO <haddr_t>)
 #field free,            FunPtr (In <H5FD_t> -> <H5FD_mem_t> -> <hid_t> -> <haddr_t> -> <hsize_t> -> IO <herr_t>)
 #field get_eoa,         FunPtr (In <H5FD_t> -> <H5FD_mem_t> -> IO <haddr_t>)
 #field set_eoa,         FunPtr (In <H5FD_t> -> <H5FD_mem_t> -> <haddr_t>)
-
-#if H5_VERSION_GE(1,10,0)
 #field get_eof,         FunPtr (In <H5FD_t> -> <H5FD_mem_t> -> IO <haddr_t>)
-#else
-#field get_eof,         FunPtr (In <H5FD_t> -> IO <haddr_t>)
-#endif
-
 #field get_handle,      FunPtr (In <H5FD_t> -> <hid_t> -> Out (Ptr ()) -> IO <herr_t>)
 #field read,            FunPtr (In <H5FD_t> -> <H5FD_mem_t> -> <hid_t> -> <haddr_t> -> <size_t> -> OutArray () -> IO <herr_t>)
 #field write,           FunPtr (In <H5FD_t> -> <H5FD_mem_t> -> <hid_t> -> <haddr_t> -> <size_t> -> InArray  () -> IO <herr_t>)
 #field flush,           FunPtr (In <H5FD_t> -> <hid_t> -> CUInt -> IO <herr_t>)
-
-#if H5_VERSION_GE(1,8,2)
 #field truncate,        FunPtr (In <H5FD_t> -> <hid_t> -> <hbool_t> -> IO <herr_t>)
-#endif
-
-#if H5_VERSION_GE(1,10,0)
 #field lock,            FunPtr (In <H5FD_t> -> <hbool_t> -> IO <herr_t>)
 #field unlock,          FunPtr (In <H5FD_t> -> IO <herr_t>)
-#else
-#field lock,            FunPtr (In <H5FD_t> -> Ptr CUChar -> CUInt -> <hbool_t> -> IO <herr_t>)
-#field unlock,          FunPtr (In <H5FD_t> -> Ptr CUChar -> <hbool_t> -> IO <herr_t>)
-#endif
-
 #array_field fl_map,    <H5FD_mem_t>
 #stoptype
 
@@ -345,17 +213,9 @@
 -- |For this file, overrides class
 #field maxaddr,         <haddr_t>
 
-#if H5_VERSION_GE(1,8,2)
 -- |Base address for HDF5 data w/in file
 #field base_addr,       <haddr_t>
-#endif
 
-#if H5_VERSION_GE(1,10,0) && H5_VERSION_LE(1,10,1)
--- |Whether the file is open for SWMR read access
--- Information from file open flags, for SWMR access
--- #field swmr_read, <hbool_t>
-#endif
-
 -- Space allocation management fields
 
 -- |Threshold for alignment
@@ -364,8 +224,6 @@
 #field alignment,       <hsize_t>
 #stoptype
 
-#if H5_VERSION_GE(1,8,9)
-
 -- |enum for the source of file image callbacks
 #newtype H5FD_file_image_op_t
 
@@ -397,7 +255,6 @@
 --     void *udata;
 -- } H5FD_file_image_callbacks_t;
 
-#endif
 
 -- |Registers a new file driver as a member of the virtual file
 -- driver class.  Certain fields of the class struct are
@@ -593,13 +450,6 @@
 --
 -- On failure, returns 'hADDR_UNDEF'
 --
-#if H5_VERSION_GE(1,10,0)
--- > haddr_t H5FDget_eof(H5FD_t *file, H5FD_mem_t type);
-#ccall H5FDget_eof, In <H5FD_t> -> <H5FD_mem_t> -> IO <haddr_t>
-#else
--- > haddr_t H5FDget_eof(H5FD_t *file);
-#ccall H5FDget_eof, In <H5FD_t> -> IO <haddr_t>
-#endif
 
 -- |Returns a pointer to the file handle of low-level virtual
 -- file driver.
@@ -643,19 +493,53 @@
 -- > herr_t H5FDflush(H5FD_t *file, hid_t dxpl_id, unsigned closing);
 #ccall H5FDflush, In <H5FD_t> -> <hid_t> -> CUInt -> IO <herr_t>
 
-#if H5_VERSION_GE(1,8,2)
 -- |Notify driver to truncate the file back to the allocated size.
 --
 -- Returns non-negative on success, negative on failure.
 --
 -- > herr_t H5FDtruncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing);
 #ccall H5FDtruncate, In <H5FD_t> -> <hid_t> -> <hbool_t> -> IO <herr_t>
-#endif
 
-#if H5_VERSION_GE(1,10,0)
+-- |Map "extensible array" header blocks to 'ohdr' type file memory, since its
+-- a fair amount of work to add a new kind of file memory and they are similar
+-- enough to object headers and probably too minor to deserve their own type.
+--
+-- Map "extensible array" index blocks to 'ohdr' type file memory, since they
+-- are similar to extensible array header blocks.
+--
+-- Map "extensible array" super blocks to 'btree' type file memory, since they
+-- are similar enough to B-tree nodes.
+--
+-- Map "extensible array" data blocks & pages to 'lheap' type file memory, since
+-- they are similar enough to local heap info.
+
+#newtype_const H5F_mem_t, H5FD_MEM_EARRAY_HDR
+#newtype_const H5F_mem_t, H5FD_MEM_EARRAY_IBLOCK
+#newtype_const H5F_mem_t, H5FD_MEM_EARRAY_SBLOCK
+#newtype_const H5F_mem_t, H5FD_MEM_EARRAY_DBLOCK
+#newtype_const H5F_mem_t, H5FD_MEM_EARRAY_DBLK_PAGE
+
+-- |Map "fixed array" header blocks to 'ohdr' type file memory, since its
+-- a fair amount of work to add a new kind of file memory and they are similar
+-- enough to object headers and probably too minor to deserve their own type.
+--
+-- Map "fixed array" data blocks & pages to 'lheap' type file memory, since
+-- they are similar enough to local heap info.
+
+#newtype_const H5F_mem_t, H5FD_MEM_FARRAY_HDR
+#newtype_const H5F_mem_t, H5FD_MEM_FARRAY_DBLOCK
+#newtype_const H5F_mem_t, H5FD_MEM_FARRAY_DBLK_PAGE
+
+-- |Defining 'H5FD_FEAT_SUPPORTS_SWMR_IO' for a VFL driver means that the
+-- driver supports the single-writer/multiple-readers I/O pattern.
+
+#num H5FD_FEAT_SUPPORTS_SWMR_IO
+
 -- > herr_t H5FDlock(H5FD_t *file, hbool_t rw);
 #ccall H5FDlock, In <H5FD_t> -> <hbool_t> -> IO <herr_t>
 
 -- > herr_t H5FDunlock(H5FD_t *file);
 #ccall H5FDunlock, In <H5FD_t> -> IO <herr_t>
-#endif
+
+-- > haddr_t H5FDget_eof(H5FD_t *file, H5FD_mem_t type);
+#ccall H5FDget_eof, In <H5FD_t> -> <H5FD_mem_t> -> IO <haddr_t>
diff --git a/src/Bindings/HDF5/Raw/H5FD/MPI.hsc b/src/Bindings/HDF5/Raw/H5FD/MPI.hsc
--- a/src/Bindings/HDF5/Raw/H5FD/MPI.hsc
+++ b/src/Bindings/HDF5/Raw/H5FD/MPI.hsc
@@ -76,22 +76,9 @@
 
 #endif /* NOT_YET */
 
-#if H5_VERSION_GE(1,8,10)
-
 -- herr_t H5FD_mpi_setup_collective(hid_t dxpl_id, MPI_Datatype *btype,
 --     MPI_Datatype *ftype);
 #ccall H5FD_mpi_setup_collective, <hid_t> -> Ptr <MPI_Datatype> -> Ptr <MPI_Datatype> -> IO <herr_t>
-
-#else
-
--- herr_t H5FD_mpi_setup_collective(hid_t dxpl_id, MPI_Datatype btype,
---     MPI_Datatype ftype);
-#ccall H5FD_mpi_setup_collective, <hid_t> -> <MPI_Datatype> -> <MPI_Datatype> -> IO <herr_t>
-
--- herr_t H5FD_mpi_teardown_collective(hid_t dxpl_id);
-#ccall H5FD_mpi_teardown_collective, <hid_t> -> IO <herr_t>
-
-#endif
 
 
 -- /* Driver specific methods */
diff --git a/src/Bindings/HDF5/Raw/H5G.hsc b/src/Bindings/HDF5/Raw/H5G.hsc
--- a/src/Bindings/HDF5/Raw/H5G.hsc
+++ b/src/Bindings/HDF5/Raw/H5G.hsc
@@ -44,10 +44,8 @@
 -- |Current max. creation order value for group
 #field max_corder,      Int64
 
-#if H5_VERSION_GE(1,8,2)
 -- |Whether group has a file mounted on it
 #field mounted,         <hbool_t>
-#endif
 
 #stoptype
 
@@ -164,12 +162,11 @@
 -- > herr_t H5Gclose(hid_t group_id);
 #ccall H5Gclose, <hid_t> -> IO <herr_t>
 
-#if H5_VERSION_GE(1,10,0)
 -- > herr_t H5Gflush(hid_t group_id);
 #ccall H5Gflush, <hid_t> -> IO <herr_t>
+
 -- > herr_t H5Grefresh(hid_t group_id);
 #ccall H5Grefresh, <hid_t> -> IO <herr_t>
-#endif
 
 #ifndef H5_NO_DEPRECATED_SYMBOLS
 
diff --git a/src/Bindings/HDF5/Raw/H5I.hsc b/src/Bindings/HDF5/Raw/H5I.hsc
--- a/src/Bindings/HDF5/Raw/H5I.hsc
+++ b/src/Bindings/HDF5/Raw/H5I.hsc
@@ -64,16 +64,8 @@
 -- TODO: I think HId_t should be parameterised over the element type and
 -- possibly also dimensionality of the dataset
 -- |Type of atoms to return to users
-#if H5_VERSION_GE(1,10,0)
-
 newtype HId_t = HId_t Int64 deriving (Storable, Eq, Ord)
 
-#else
-
-newtype HId_t = HId_t Int32 deriving (Storable, Eq, Ord)
-
-#endif
-
 instance Show HId_t where
     showsPrec p (HId_t x) = showParen (p>10)
         ( showString "HId_t 0x"
@@ -280,10 +272,8 @@
 -- > htri_t H5Itype_exists(H5I_type_t type);
 #ccall H5Itype_exists, <H5I_type_t> -> IO <htri_t>
 
-#if H5_VERSION_GE(1,8,3)
 -- |Check if the given id is valid.  An id is valid if it is in
 -- use and has an application reference count of at least 1.
 --
 -- > htri_t H5Iis_valid(hid_t id);
 #ccall H5Iis_valid, <hid_t> -> IO <htri_t>
-#endif
diff --git a/src/Bindings/HDF5/Raw/H5L.hsc b/src/Bindings/HDF5/Raw/H5L.hsc
--- a/src/Bindings/HDF5/Raw/H5L.hsc
+++ b/src/Bindings/HDF5/Raw/H5L.hsc
@@ -16,10 +16,8 @@
 
 import Bindings.HDF5.Raw.H5
 import Bindings.HDF5.Raw.H5I
-import Bindings.HDF5.Raw.H5T
-#if H5_VERSION_GE(1,12,0)
 import Bindings.HDF5.Raw.H5O
-#endif
+import Bindings.HDF5.Raw.H5T
 
 import Foreign.Ptr.Conventions
 
@@ -66,154 +64,7 @@
 -- |Link ids at or above this value are \"user-defined\" link types.
 #newtype_const H5L_type_t, H5L_TYPE_UD_MIN
 
--- |Information struct for link (for 'h5l_get_info' / 'h5l_get_info_by_idx')
 
-#if H5_VERSION_GE(1,12,0)
-
-#starttype H5L_info1_t
-#field type,                <H5L_type_t>
-#field corder_valid,        <hbool_t>
-#field corder,              Int64
-#field cset,                <H5T_cset_t>
-#union_field u.address,     <haddr_t>
-#union_field u.val_size,    <size_t>
-#stoptype
-
-#ccall H5Lget_info1, <hid_t> -> CString -> Out <H5L_info1_t> -> <hid_t> -> IO <herr_t>
-#ccall H5Lget_info_by_idx1, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5L_info1_t> -> <hid_t> -> IO <herr_t>
-
-type H5L_iterate1_t a = FunPtr (HId_t -> CString -> In H5L_info1_t -> InOut a -> IO HErr_t)
-
-#ccall H5Literate1, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate1_t a -> InOut a -> IO <herr_t>
-#ccall H5Literate_by_name1, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate1_t a -> InOut a -> <hid_t> -> IO <herr_t>
-#ccall H5Lvisit1, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate1_t a -> InOut a -> IO <herr_t>
-#ccall H5Lvisit_by_name1, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate1_t a -> InOut a -> <hid_t> -> IO <herr_t>
-
-#starttype H5L_info2_t
-#field type,                <H5L_type_t>
-#field corder_valid,        <hbool_t>
-#field corder,              Int64
-#field cset,                <H5T_cset_t>
-#union_field u.token,       <H5O_token_t>
-#union_field u.val_size,    <size_t>
-#stoptype
-
-#ccall H5Lget_info2, <hid_t> -> CString -> Out <H5L_info2_t> -> <hid_t> -> IO <herr_t>
-#ccall H5Lget_info_by_idx2, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5L_info2_t> -> <hid_t> -> IO <herr_t>
-
-type H5L_iterate2_t a = FunPtr (HId_t -> CString -> In H5L_info2_t -> InOut a -> IO HErr_t)
-
-#ccall H5Literate2, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate2_t a -> InOut a -> IO <herr_t>
-#ccall H5Literate_by_name2, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate2_t a -> InOut a -> <hid_t> -> IO <herr_t>
-#ccall H5Lvisit2, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate2_t a -> InOut a -> IO <herr_t>
-#ccall H5Lvisit_by_name2, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate2_t a -> InOut a -> <hid_t> -> IO <herr_t>
-
-#else
-
-#starttype H5L_info_t
-#field type,                <H5L_type_t>
-#field corder_valid,        <hbool_t>
-#field corder,              Int64
-#field cset,                <H5T_cset_t>
-#union_field u.address,     <haddr_t>
-#union_field u.val_size,    <size_t>
-#stoptype
-
-#ccall H5Lget_info, <hid_t> -> CString -> Out <H5L_info_t> -> <hid_t> -> IO <herr_t>
-
-#ccall H5Lget_info_by_idx, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5L_info_t> -> <hid_t> -> IO <herr_t>
-
--- |Prototype for 'h5l_iterate' / 'h5l_iterate_by_name' operator
---
--- > typedef herr_t (*H5L_iterate_t)(hid_t group, const char *name, const H5L_info_t *info,
--- >     void *op_data);
-
-type H5L_iterate_t a = FunPtr (HId_t -> CString -> In H5L_info_t -> InOut a -> IO HErr_t)
-
--- |Iterates over links in a group, with user callback routine,
--- according to the order within an index.
---
--- Same pattern of behavior as 'h5g_iterate'.
---
--- Returns the return value of the first operator that returns non-zero,
--- or zero if all members were processed with no operator returning non-zero.
---
--- Returns negative if something goes wrong within the library, or the
--- negative value returned by one of the operators.
---
--- > herr_t H5Literate(hid_t grp_id, H5_index_t idx_type,
--- >     H5_iter_order_t order, hsize_t *idx, H5L_iterate_t op, void *op_data);
-#ccall H5Literate, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate_t a -> InOut a -> IO <herr_t>
-
--- |Iterates over links in a group, with user callback routine,
--- according to the order within an index.
---
--- Same pattern of behavior as 'h5g_iterate'.
---
--- Returns the return value of the first operator that returns non-zero,
--- or zero if all members were processed with no operator returning non-zero.
---
--- Returns negative if something goes wrong within the library, or the
--- negative value returned by one of the operators.
---
--- > herr_t H5Literate_by_name(hid_t loc_id, const char *group_name,
--- >     H5_index_t idx_type, H5_iter_order_t order, hsize_t *idx,
--- >     H5L_iterate_t op, void *op_data, hid_t lapl_id);
-#ccall H5Literate_by_name, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate_t a -> InOut a -> <hid_t> -> IO <herr_t>
-
--- |Recursively visit all the links in a group and all
--- the groups that are linked to from that group.  Links within
--- each group are visited according to the order within the
--- specified index (unless the specified index does not exist for
--- a particular group, then the \"name\" index is used).
---
--- NOTE: Each _link_ reachable from the initial group will only be
--- visited once.  However, because an object may be reached from
--- more than one link, the visitation may call the application's
--- callback with more than one link that points to a particular
--- _object_.
---
--- Returns the return value of the first operator that
--- returns non-zero, or zero if all members were
--- processed with no operator returning non-zero.
---
--- Returns negative if something goes wrong within the
--- library, or the negative value returned by one
--- of the operators.
---
--- > herr_t H5Lvisit(hid_t grp_id, H5_index_t idx_type, H5_iter_order_t order,
--- >     H5L_iterate_t op, void *op_data);
-#ccall H5Lvisit, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate_t a -> InOut a -> IO <herr_t>
-
--- |Recursively visit all the links in a group and all
--- the groups that are linked to from that group.  Links within
--- each group are visited according to the order within the
--- specified index (unless the specified index does not exist for
--- a particular group, then the \"name\" index is used).
---
--- NOTE: Each _link_ reachable from the initial group will only be
--- visited once.  However, because an object may be reached from
--- more than one link, the visitation may call the application's
--- callback with more than one link that points to a particular
--- _object_.
---
--- Returns the return value of the first operator that
--- returns non-zero, or zero if all members were
--- processed with no operator returning non-zero.
---
--- Returns negative if something goes wrong within the
--- library, or the negative value returned by one
--- of the operators.
---
--- > herr_t H5Lvisit_by_name(hid_t loc_id, const char *group_name,
--- >     H5_index_t idx_type, H5_iter_order_t order, H5L_iterate_t op,
--- >     void *op_data, hid_t lapl_id);
-#ccall H5Lvisit_by_name, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate_t a -> InOut a -> <hid_t> -> IO <herr_t>
-
-
-#endif
-
-
 -- /* The H5L_class_t struct can be used to override the behavior of a
 --  * "user-defined" link class. Users should populate the struct with callback
 --  * functions defined below.
@@ -509,3 +360,214 @@
 -- > herr_t H5Lcreate_external(const char *file_name, const char *obj_name,
 -- >     hid_t link_loc_id, const char *link_name, hid_t lcpl_id, hid_t lapl_id);
 #ccall H5Lcreate_external, CString -> CString -> <hid_t> -> CString -> <hid_t> -> <hid_t> -> IO <herr_t>
+
+
+--------------------------
+-- Compatibility macros --
+--------------------------
+
+-- H5L_info_t
+
+#if defined(H5Lget_info_vers)
+
+#  starttype H5L_info1_t
+#  field type,                <H5L_type_t>
+#  field corder_valid,        <hbool_t>
+#  field corder,              Int64
+#  field cset,                <H5T_cset_t>
+#  union_field u.address,     <haddr_t>
+#  union_field u.val_size,    <size_t>
+#  stoptype
+
+#  starttype H5L_info2_t
+#  field type,                <H5L_type_t>
+#  field corder_valid,        <hbool_t>
+#  field corder,              Int64
+#  field cset,                <H5T_cset_t>
+#  union_field u.token,       <H5O_token_t>
+#  union_field u.val_size,    <size_t>
+#  stoptype
+
+# if H5Lget_info_vers == 1
+
+#synonym_t H5L_info_t, <H5L_info1_t>
+
+# else
+
+#synonym_t H5L_info_t, <H5L_info2_t>
+
+# endif
+
+#else
+
+# starttype H5L_info_t
+# field type,                <H5L_type_t>
+# field corder_valid,        <hbool_t>
+# field corder,              Int64
+# field cset,                <H5T_cset_t>
+# union_field u.address,     <haddr_t>
+# union_field u.val_size,    <size_t>
+# stoptype
+
+#endif
+
+-- H5Lget_info
+
+#if defined(H5Lget_info_vers)
+# ccall H5Lget_info1, <hid_t> -> CString -> Out <H5L_info1_t> -> <hid_t> -> IO <herr_t>
+# ccall H5Lget_info2, <hid_t> -> CString -> Out <H5L_info2_t> -> <hid_t> -> IO <herr_t>
+# if H5Lget_info_vers == 1
+h5l_get_info :: HId_t -> CString -> Out H5L_info_t -> HId_t -> IO HErr_t
+h5l_get_info = h5l_get_info1
+# else
+h5l_get_info :: HId_t -> CString -> Out H5L_info_t -> HId_t -> IO HErr_t
+h5l_get_info = h5l_get_info2
+# endif
+#else
+# ccall H5Lget_info, <hid_t> -> CString -> Out <H5L_info_t> -> <hid_t> -> IO <herr_t>
+h5l_get_info1 :: HId_t -> CString -> Out H5L_info_t -> HId_t -> IO HErr_t
+h5l_get_info1 = h5l_get_info
+#endif
+
+-- H5Lget_info_by_idx
+
+#if defined(H5Lget_info_by_idx_vers)
+# ccall H5Lget_info_by_idx1, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5L_info1_t> -> <hid_t> -> IO <herr_t
+# ccall H5Lget_info_by_idx2, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5L_info2_t> -> <hid_t> -> IO <herr_t
+# if H5Lget_info_by_idx_vers == 1
+h5l_get_info_by_idx :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> HSize_t -> Out H5L_info_t -> HId_t -> IO HErr_t
+h5l_get_info_by_idx = h5l_get_info_by_idx1
+# else
+h5l_get_info_by_idx :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> HSize_t -> Out H5L_info_t -> HId_t -> IO HErr_t
+h5l_get_info_by_idx = h5l_get_info_by_idx2
+# endif
+#else
+# ccall H5Lget_info_by_idx, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5L_info_t> -> <hid_t> -> IO <herr_t
+h5l_get_info_by_idx1 :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> HSize_t -> Out H5L_info_t -> HId_t -> IO HErr_t
+h5l_get_info_by_idx1 = h5l_get_info_by_idx
+#endif
+
+-- H5L_iterate_t
+
+#if defined(H5Literate_vers)
+
+type H5L_iterate1_t a = FunPtr (HId_t -> CString -> In H5L_info1_t -> InOut a -> IO HErr_t)
+
+foreign import ccall "wrapper" mk'H5L_iterate1_t
+    :: (HId_t -> CString -> In H5L_info1_t -> InOut a -> IO HErr_t)
+    -> IO (FunPtr (HId_t -> CString -> In H5L_info1_t -> InOut a -> IO HErr_t))
+
+type H5L_iterate2_t a = FunPtr (HId_t -> CString -> In H5L_info2_t -> InOut a -> IO HErr_t)
+
+foreign import ccall "wrapper" mk'H5L_iterate2_t
+    :: (HId_t -> CString -> In H5L_info2_t -> InOut a -> IO HErr_t)
+    -> IO (FunPtr (HId_t -> CString -> In H5L_info2_t -> InOut a -> IO HErr_t))
+# if H5Literate_vers == 1
+
+type H5L_iterate_t  a = FunPtr (HId_t -> CString -> In H5L_info_t  -> InOut a -> IO HErr_t)
+foreign import ccall "wrapper" mk'H5L_iterate_t
+    :: (HId_t -> CString -> In H5L_info_t -> InOut a -> IO HErr_t)
+    -> IO (FunPtr (HId_t -> CString -> In H5L_info_t -> InOut a -> IO HErr_t))
+
+# elif H5Literate_vers == 2
+
+type H5L_iterate_t  a = FunPtr (HId_t -> CString -> In H5L_info_t  -> InOut a -> IO HErr_t)
+foreign import ccall "wrapper" mk'H5L_iterate_t
+    :: (HId_t -> CString -> In H5L_info_t -> InOut a -> IO HErr_t)
+    -> IO (FunPtr (HId_t -> CString -> In H5L_info_t -> InOut a -> IO HErr_t))
+
+# else
+#  error TODO
+# endif
+#else
+
+type H5L_iterate_t  a = FunPtr (HId_t -> CString -> In H5L_info_t  -> InOut a -> IO HErr_t)
+
+foreign import ccall "wrapper" mk'H5L_iterate_t
+    :: (HId_t -> CString -> In H5L_info_t -> InOut a -> IO HErr_t)
+    -> IO (FunPtr (HId_t -> CString -> In H5L_info_t -> InOut a -> IO HErr_t))
+
+#endif
+
+-- H5Literate
+
+#if defined(H5Literate_vers)
+# ccall H5Literate1, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate1_t a -> InOut a -> IO <herr_t>
+# ccall H5Literate2, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate2_t a -> InOut a -> IO <herr_t>
+# if H5Literate_vers == 1
+h5l_iterate :: HId_t -> H5_index_t -> H5_iter_order_t -> InOut HSize_t -> H5L_iterate_t  a -> InOut a -> IO HErr_t
+h5l_iterate = h5l_iterate1
+# elif H5Literate_vers == 2
+h5l_iterate :: HId_t -> H5_index_t -> H5_iter_order_t -> InOut HSize_t -> H5L_iterate_t  a -> InOut a -> IO HErr_t
+h5l_iterate = h5l_iterate2
+# else
+#  error TODO
+# endif
+#else
+# ccall H5Literate, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate_t a -> InOut a -> IO <herr_t>
+h5l_iterate1 :: HId_t -> H5_index_t -> H5_iter_order_t -> InOut HSize_t -> H5L_iterate_t  a -> InOut a -> IO HErr_t
+h5l_iterate1 = h5l_iterate
+#endif
+
+
+-- H5Literate_by_name
+
+#if defined(H5Literate_by_name_vers)
+# ccall H5Literate_by_name1, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate1_t a -> InOut a -> <hid_t> -> IO <herr_t>
+# ccall H5Literate_by_name2, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate2_t a -> InOut a -> <hid_t> -> IO <herr_t>
+# if H5Literate_by_name_vers == 1
+h5l_iterate_by_name :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> InOut HSize_t -> H5L_iterate_t  a -> InOut a -> HId_t -> IO HErr_t
+h5l_iterate_by_name = h5l_iterate_by_name1
+# elif H5Literate_by_name_vers == 2
+h5l_iterate_by_name :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> InOut HSize_t -> H5L_iterate_t  a -> InOut a -> HId_t -> IO HErr_t
+h5l_iterate_by_name = h5l_iterate_by_name2
+# else
+#  error TODO
+# endif
+#else
+# ccall H5Literate_by_name, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> InOut <hsize_t> -> H5L_iterate_t a -> InOut a -> <hid_t> -> IO <herr_t>
+h5l_iterate_by_name1 :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> InOut HSize_t -> H5L_iterate_t  a -> InOut a -> HId_t -> IO HErr_t
+h5l_iterate_by_name1 = h5l_iterate_by_name
+#endif
+
+
+-- H5Lvisit
+
+#if defined(H5Lvisit_vers)
+# ccall H5Lvisit1, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate1_t a -> InOut a -> IO <herr_t>
+# ccall H5Lvisit2, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate2_t a -> InOut a -> IO <herr_t>
+# if H5Lvisit_vers == 1
+h5l_visit :: HId_t -> H5_index_t -> H5_iter_order_t -> H5L_iterate_t a -> InOut a -> IO HErr_t
+h5l_visit = h5l_visit1
+# elif H5Lvisit_vers == 2
+h5l_visit :: HId_t -> H5_index_t -> H5_iter_order_t -> H5L_iterate_t a -> InOut a -> IO HErr_t
+h5l_visit = h5l_visit2
+# else
+#  error TODO
+# endif
+#else
+# ccall H5Lvisit, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate_t a -> InOut a -> IO <herr_t>
+h5l_visit1 :: HId_t -> H5_index_t -> H5_iter_order_t -> H5L_iterate_t a -> InOut a -> IO HErr_t
+h5l_visit1 = h5l_visit
+#endif
+
+
+-- H5Lvisit_by_name
+
+#if defined(H5Lvisit_by_name_vers)
+# ccall H5Lvisit_by_name1, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate1_t a -> InOut a -> <hid_t> -> IO <herr_t>
+# ccall H5Lvisit_by_name2, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate2_t a -> InOut a -> <hid_t> -> IO <herr_t>
+# if H5Lvisit_by_name_vers == 1
+h5l_visit_by_name :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> H5L_iterate_t a -> InOut a -> HId_t -> IO HErr_t
+h5l_visit_by_name = h5l_visit_by_name1
+# elif H5Lvisit_by_name_vers == 2
+h5l_visit_by_name :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> H5L_iterate_t a -> InOut a -> HId_t -> IO HErr_t
+h5l_visit_by_name = h5l_visit_by_name2
+# else
+#  error TODO
+# endif
+#else
+# ccall H5Lvisit_by_name, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5L_iterate_t a -> InOut a -> <hid_t> -> IO <herr_t>
+h5l_visit_by_name1 :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> H5L_iterate_t a -> InOut a -> HId_t -> IO HErr_t
+h5l_visit_by_name1 = h5l_visit_by_name
+#endif
diff --git a/src/Bindings/HDF5/Raw/H5O.hsc b/src/Bindings/HDF5/Raw/H5O.hsc
--- a/src/Bindings/HDF5/Raw/H5O.hsc
+++ b/src/Bindings/HDF5/Raw/H5O.hsc
@@ -36,13 +36,9 @@
 -- |Copy NULL messages (empty space)
 #num H5O_COPY_PRESERVE_NULL_FLAG
 
-#if H5_VERSION_GE(1,8,9)
-
 -- |Merge committed datatypes in dest file
 #num H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG
 
-#endif
-
 -- |All object copying flags (for internal checking)
 #num H5O_COPY_ALL
 
@@ -115,165 +111,29 @@
 -- |Number of different object types
 #num H5O_TYPE_NTYPES
 
-#if H5_VERSION_GE(1,8,4)
-
--- |Information struct for object header metadata
--- (for 'h5o_get_info'/ 'h5o_get_info_by_name' / 'h5o_get_info_by_idx')
 #starttype H5O_hdr_info_t
-
--- |Version number of header format in file
 #field version,         CUInt
-
--- |Number of object header messages
 #field nmesgs,          CUInt
-
--- |Number of object header chunks
 #field nchunks,         CUInt
-
--- |Object header status flags
 #field flags,           CUInt
-
--- |Total space for storing object header in file
 #field space.total,     <hsize_t>
-
--- |Space within header for object header metadata information
 #field space.meta,      <hsize_t>
-
--- |Space within header for actual message information
 #field space.mesg,      <hsize_t>
-
--- |Free space within object header
 #field space.free,      <hsize_t>
-
--- |Flags to indicate presence of message type in header
 #field mesg.present,    Word64
-
--- |Flags to indicate message type is shared in header
 #field mesg.shared,     Word64
-
 #stoptype
 
-#endif
-
-#if H5_VERSION_GE(1,11,0)
-
-#starttype H5O_token_t
-
-#field __data,          CUChar
-
-#stoptype
-
-#endif
-
--- |Information struct for object
--- (for 'h5o_get_info'/ 'h5o_get_info_by_name' / 'h5o_get_info_by_idx')
-#if (H5Fget_info_vers == 1)
-#starttype H5O_info_t
-#else
-#starttype H5O_info2_t
-#endif
-
--- |File number that object is located in
-#field fileno,          CULong
-
-#if (H5Fget_info_vers == 1)
--- |Object address in file
-#field addr,            <haddr_t>
-#endif
-
--- |Token representing the object
-#if H5_VERSION_GE(1,11,0)
-#field token,            <H5O_token_t>
-#endif
-
--- |Basic object type (group, dataset, etc.)
-#field type,            <H5O_type_t>
-
--- |Reference count of object
-#field rc,              CUInt
-
--- |Access time
-#field atime,           <time_t>
-
--- |Modification time
-#field mtime,           <time_t>
-
--- |Change time
-#field ctime,           <time_t>
-
--- |Birth time
-#field btime,           <time_t>
-
--- |# of attributes attached to object
-#field num_attrs,       <hsize_t>
-
-#if H5_VERSION_GE(1,8,4)
-
-#if (H5Fget_info_vers == 1)
--- |Object header information
-#field hdr,             <H5O_hdr_info_t>
-#endif
-
-#else
-
-#if (H5Fget_info_vers == 1)
--- |Version number of header format in file
-#field hdr.version,      CUInt
-
--- |Number of object header messages
-#field hdr.nmesgs,       CUInt
-
--- |Number of object header chunks
-#field hdr.nchunks,      CUInt
-
--- |Object header status flags
-#field hdr.flags,        CUInt
-
--- |Total space for storing object header in file
-#field hdr.space.total,  <hsize_t>
-
--- |Space within header for object header metadata information
-#field hdr.space.meta,   <hsize_t>
-
--- |Space within header for actual message information
-#field hdr.space.mesg,   <hsize_t>
-
--- |Free space within object header
-#field hdr.space.free,   <hsize_t>
-
--- |Flags to indicate presence of message type in header
-#field hdr.mesg.present, Word64
-
--- |Flags to indicate message type is shared in header
-#field hdr.mesg.shared,  Word64
-
-#endif
-
-#endif
-
-#if (H5Fget_info_vers == 1)
--- |v1/v2 B-tree & local/fractal heap for groups, B-tree for chunked datasets
-#field meta_size.obj,   <H5_ih_info_t>
-
--- |v2 B-tree & heap for attributes
-#field meta_size.attr,  <H5_ih_info_t>
-
-#endif
-
+#starttype H5O_stat_t
+#field size,    <hsize_t>
+#field free,    <hsize_t>
+#field nmesgs,  CUInt
+#field nchunks, CUInt
 #stoptype
 
-
 -- |Typedef for message creation indexes
 #newtype H5O_msg_crt_idx_t, Eq, Ord, Read
 
-#if (H5Fget_info_vers == 1)
--- |Prototype for 'h5o_visit' / 'h5o_visit_by_name' operator
-type H5O_iterate_t a = FunPtr (HId_t -> CString -> In H5O_info_t -> InOut a -> IO HErr_t)
-#else
--- |Prototype for 'h5o_visit' / 'h5o_visit_by_name' operator
-type H5O_iterate2_t a = FunPtr (HId_t -> CString -> In H5O_info2_t -> InOut a -> IO HErr_t)
-#endif
-
 #newtype H5O_mcdt_search_ret_t
 
 -- |Abort H5Ocopy
@@ -359,44 +219,11 @@
 -- >     H5_index_t idx_type, H5_iter_order_t order, hsize_t n, hid_t lapl_id);
 #ccall H5Oopen_by_idx, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> <hid_t> -> IO <hid_t>
 
-#if H5_VERSION_GE(1,8,5)
-
 -- |Determine if a linked-to object exists
 --
 -- > htri_t H5Oexists_by_name(hid_t loc_id, const char *name, hid_t lapl_id);
 #ccall H5Oexists_by_name, <hid_t> -> CString -> <hid_t> -> IO <htri_t>
 
-#endif
-
--- |Retrieve information about an object.
---
--- Returns non-negative on success, negative on failure.
---
--- > herr_t H5Oget_info(hid_t loc_id, H5O_info_t *oinfo);
-#if (H5Fget_info_vers == 1)
-#ccall H5Oget_info, <hid_t> -> Out <H5O_info_t> -> IO <herr_t>
-#else
-#ccall H5Oget_info, <hid_t> -> Out <H5O_info2_t> -> IO <herr_t>
-#endif
-
--- |Retrieve information about an object.
---
--- Returns non-negative on success, negative on failure.
---
--- > herr_t H5Oget_info_by_name(hid_t loc_id, const char *name, H5O_info_t *oinfo,
--- >     hid_t lapl_id);
-#ccall H5Oget_info_by_name, <hid_t> -> CString -> Out <H5O_info_t> -> <hid_t> -> IO <herr_t>
-
--- |Retrieve information about an object, according to the order
--- of an index.
---
--- Returns non-negative on success, negative on failure.
---
--- > herr_t H5Oget_info_by_idx(hid_t loc_id, const char *group_name,
--- >     H5_index_t idx_type, H5_iter_order_t order, hsize_t n, H5O_info_t *oinfo,
--- >     hid_t lapl_id);
-#ccall H5Oget_info_by_idx, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5O_info_t> -> <hid_t> -> IO <herr_t>
-
 -- |Creates a hard link from 'new_name' to the object specified
 -- by 'obj_id' using properties defined in the Link Creation
 -- Property List 'lcpl'.
@@ -569,6 +396,195 @@
 -- >     char *comment, size_t bufsize, hid_t lapl_id);
 #ccall H5Oget_comment_by_name, <hid_t> -> CString -> OutArray CChar -> <size_t> -> <hid_t> -> IO <ssize_t>
 
+-- |Close an open file object.
+--
+-- This is the companion to 'h5o_open'. It is used to close any
+-- open object in an HDF5 file (but not IDs are that not file
+-- objects, such as property lists and dataspaces). It has
+-- the same effect as calling 'h5g_close', 'h5d_close', or 'h5t_close'.
+--
+-- Returns non-negative on success, negative on failure.
+--
+-- > herr_t H5Oclose(hid_t object_id);
+#ccall H5Oclose, <hid_t> -> IO <herr_t>
+
+#ccall H5Oare_mdc_flushes_disabled, <hid_t> -> Out hbool_t -> IO <herr_t>
+#ccall H5Odisable_mdc_flushes, <hid_t> -> IO <herr_t>
+#ccall H5Oenable_mdc_flushes, <hid_t> -> IO <herr_t>
+#ccall H5Oflush, <hid_t> -> IO <herr_t>
+#ccall H5Orefresh, <hid_t> -> IO <herr_t>
+
+#if H5_VERSION_GE(1,10,3)
+
+#num H5O_INFO_BASIC
+#num H5O_INFO_TIME
+#num H5O_INFO_NUM_ATTRS
+#num H5O_INFO_HDR
+#num H5O_INFO_META_SIZE
+#num H5O_INFO_ALL
+
+#endif
+
+--------------------------
+-- Compatibility Macros --
+--------------------------
+
+-- H5O_info_t
+
+#if defined(H5O_info_t_vers)
+
+#starttype H5O_info1_t
+#field fileno,           CULong
+#field addr,             <haddr_t>
+#field type,             <H5O_type_t>
+#field rc,               CUInt
+#field atime,            <time_t>
+#field mtime,            <time_t>
+#field ctime,            <time_t>
+#field btime,            <time_t>
+#field num_attrs,        <hsize_t>
+#field hdr,              <H5O_hdr_info_t>
+#field meta_size.obj,    <H5_ih_info_t>
+#field meta_size.attr,   <H5_ih_info_t>
+#stoptype
+
+#starttype H5O_token_t
+#field __data,          CUChar
+#stoptype
+
+#starttype H5O_info2_t
+#field fileno,          CULong
+#field token,           <H5O_token_t>
+#field type,            <H5O_type_t>
+#field rc,              CUInt
+#field atime,           <time_t>
+#field mtime,           <time_t>
+#field ctime,           <time_t>
+#field btime,           <time_t>
+#field num_attrs,       <hsize_t>
+#stoptype
+
+# if H5O_info_t_vers == 1
+
+#synonym_t H5O_info_t, <H5O_info1_t>
+
+# elif H5O_info_t_vers == 2
+
+#synonym_t H5O_info_t, <H5O_info2_t>
+
+# endif
+
+#else
+
+#starttype H5O_info_t
+#field fileno,           CULong
+#field addr,             <haddr_t>
+#field type,             <H5O_type_t>
+#field rc,               CUInt
+#field atime,            <time_t>
+#field mtime,            <time_t>
+#field ctime,            <time_t>
+#field btime,            <time_t>
+#field num_attrs,        <hsize_t>
+#field hdr,              <H5O_hdr_info_t>
+#field meta_size.obj,    <H5_ih_info_t>
+#field meta_size.attr,   <H5_ih_info_t>
+#stoptype
+
+#endif
+
+-- H5O_iterate_t
+
+#if defined(H5O_iterate_t_vers)
+type H5O_iterate1_t a = FunPtr (HId_t -> CString -> In H5O_info1_t -> InOut a -> IO HErr_t)
+type H5O_iterate2_t a = FunPtr (HId_t -> CString -> In H5O_info2_t -> InOut a -> IO HErr_t)
+# if H5O_iterate_t_vers == 1
+type H5O_iterate_t  a = FunPtr (HId_t -> CString -> In H5O_info_t ->  InOut a -> IO HErr_t)
+# elif H5O_iterate_t_vers == 2
+type H5O_iterate_t  a = FunPtr (HId_t -> CString -> In H5O_info_t  -> InOut a -> IO HErr_t)
+# else
+#  error TODO
+# endif
+#else
+type H5O_iterate_t a = FunPtr (HId_t -> CString -> In H5O_info_t -> InOut a -> IO HErr_t)
+type H5O_iterate1_t a = H5O_iterate_t a
+#endif
+
+-- H5Oget_info
+
+#if defined(H5Oget_info_vers)
+# ccall H5Oget_info1, <hid_t> -> Out <H5O_info1_t> -> IO <herr_t>
+# ccall H5Oget_info2, <hid_t> -> Out <H5O_info1_t> -> CUInt -> IO <herr_t>
+# if H5Oget_info_vers == 1
+h5o_get_info :: HId_t -> Out H5O_info_t -> IO HErr_t
+h5o_get_info = h5o_get_info1
+# elif H5Oget_info_vers == 2
+h5o_get_info :: HId_t -> Out H5O_info_t -> CUInt -> IO HErr_t
+h5o_get_info = h5o_get_info2
+# elif H5Oget_info_vers == 3
+#  ccall   H5Oget_info, <hid_t> -> Out <H5O_info2_t> -> CUInt -> IO <herr_t>
+h5o_get_info :: HId_t -> Out H5O_info_t -> CUInt -> IO HErr_t
+h5o_get_info = h5o_get_info3
+# else
+#  error TODO
+# endif
+#else
+# ccall H5Oget_info, <hid_t> -> Out <H5O_info_t> -> IO <herr_t>
+h5o_get_info1 :: HId_t -> Out H5O_info_t -> IO HErr_t
+h5o_get_info1 = h5o_get_info
+#endif
+
+
+-- H5Oget_info_by_idx
+
+#if defined(H5Oget_info_by_idx_vers)
+# ccall H5Oget_info_by_idx1, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5O_info_t> -> <hid_t> -> IO <herr_t>
+# ccall H5Oget_info_by_idx2, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5O_info_t> -> CUInt -> <hid_t> -> IO <herr_t>
+# if H5Oget_info_by_idx_vers == 1
+h5o_get_info_by_idx :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> HSize_t -> Out H5O_info_t -> HId_t -> IO HErr_t
+h5o_get_info_by_idx = h5o_get_info_by_idx1
+# elif H5Oget_info_by_idx_vers == 2
+h5o_get_info_by_idx :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> HSize_t -> Out H5O_info_t -> CUInt ->HId_t -> IO HErr_t
+h5o_get_info_by_idx = h5o_get_info_by_idx2
+# elif H5Oget_info_by_idx_vers == 3
+#  ccall   H5Oget_info_by_idx3, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5O_info2_t> -> CUInt -> <hid_t> -> IO <herr_t>
+h5o_get_info_by_idx :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> HSize_t -> Out H5O_info_t -> CUInt -> HId_t -> IO HErr_t
+h5o_get_info_by_idx = h5o_get_info_by_idx3
+# else
+#  error TODO
+# endif
+#else
+# ccall H5Oget_info_by_idx, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> <hsize_t> -> Out <H5O_info_t> -> <hid_t> -> IO <herr_t>
+h5o_get_info_by_idx1 :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> HSize_t -> Out H5O_info_t -> HId_t -> IO HErr_t
+h5o_get_info_by_idx1 = h5o_get_info_by_idx
+#endif
+
+-- H5Oget_info_by_name
+
+#if defined(H5Oget_info_by_name_vers)
+# ccall H5Oget_info_by_name1, <hid_t> -> CString -> Out <H5O_info_t> -> <hid_t> -> IO <herr_t>
+# ccall H5Oget_info_by_name2, <hid_t> -> CString -> Out <H5O_info_t> -> CUInt -> <hid_t> -> IO <herr_t>
+# if H5Oget_info_by_name_vers == 1
+h5o_get_info_by_name :: HId_t -> CString -> Out H5O_info_t -> HId_t -> IO HErr_t
+h5o_get_info_by_name = h5o_get_info_by_name1
+# elif H5Oget_info_by_name_vers == 2
+h5o_get_info_by_name :: HId_t -> CString -> Out H5O_info_t -> CUInt -> HId_t -> IO HErr_t
+h5o_get_info_by_name = h5o_get_info_by_name2
+# elif H5Oget_info_by_name_vers == 3
+#  ccall   H5Oget_info_by_name3, <hid_t> -> CString -> Out <H5O_info2_t> -> CUInt -> <hid_t> -> IO <herr_t>
+h5o_get_info_by_name :: HId_t -> CString -> Out H5O_info_t -> CUInt -> HId_t -> IO HErr_t
+h5o_get_info_by_name = h5o_get_info_by_name3
+# else
+#  error TODO
+# endif
+#else
+# ccall H5Oget_info_by_name, <hid_t> -> CString -> Out <H5O_info_t> -> <hid_t> -> IO <herr_t>
+h5o_get_info_by_name1 :: HId_t -> CString -> Out H5O_info_t -> HId_t -> IO HErr_t
+h5o_get_info_by_name1 = h5o_get_info_by_name
+#endif
+
+-- H5Ovisit
+
 -- |Recursively visit an object and all the objects reachable
 -- from it.  If the starting object is a group, all the objects
 -- linked to from that group will be visited.  Links within
@@ -594,12 +610,32 @@
 --
 -- > herr_t H5Ovisit(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
 -- >     H5O_iterate_t op, void *op_data);
-#if (H5Fget_info_vers == 1)
-#ccall H5Ovisit, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate_t a -> InOut a -> IO <herr_t>
+
+#if defined(H5Ovisit_vers)
+# ccall H5Ovisit1, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate1_t a -> InOut a -> IO <herr_t>
+# ccall H5Ovisit2, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate1_t a -> InOut a -> CUInt -> IO <herr_t>
+# if H5Ovisit_vers == 1
+h5o_visit :: HId_t -> H5_index_t -> H5_iter_order_t -> H5O_iterate_t a -> InOut a -> IO HErr_t
+h5o_visit = h5o_visit1
+# elif H5Ovisit_vers == 2
+h5o_visit :: HId_t -> H5_index_t -> H5_iter_order_t -> H5O_iterate_t a -> InOut a -> CUInt -> IO HErr_t
+h5o_visit = h5o_visit2
+# elif H5Ovisit_vers == 3
+# ccall H5Ovisit3, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate2_t a -> InOut a -> CUInt -> IO <herr_t>
+h5o_visit :: HId_t -> H5_index_t -> H5_iter_order_t -> H5O_iterate_t a -> InOut a -> CUInt -> IO HErr_t
+h5o_visit = h5o_visit3
+# else
+#  error TODO
+# endif
 #else
-#ccall H5Ovisit, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate2_t a -> InOut a -> IO <herr_t>
+# ccall H5Ovisit, <hid_t> -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate_t a -> InOut a -> IO <herr_t>
+h5o_visit1 :: HId_t -> H5_index_t -> H5_iter_order_t -> H5O_iterate_t a -> InOut a -> IO HErr_t
+h5o_visit1 = h5o_visit
 #endif
 
+
+-- H5Ovisit_by_name
+
 -- |Recursively visit an object and all the objects reachable
 -- from it.  If the starting object is a group, all the objects
 -- linked to from that group will be visited.  Links within
@@ -626,58 +662,24 @@
 -- > herr_t H5Ovisit_by_name(hid_t loc_id, const char *obj_name,
 -- >     H5_index_t idx_type, H5_iter_order_t order, H5O_iterate_t op,
 -- >     void *op_data, hid_t lapl_id);
+#if defined(H5Ovisit_by_name_vers)
+# ccall H5Ovisit_by_name1, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate_t a -> InOut a -> <hid_t> -> IO <herr_t>
+# ccall H5Ovisit_by_name2, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate_t a -> InOut a -> CUInt -> <hid_t> -> IO <herr_t>
+# if H5Ovisit_by_name_vers == 1
+h5o_visit_by_name :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> H5O_iterate_t a -> InOut a -> HId_t -> IO HErr_t
+h5o_visit_by_name = h5o_visit_by_name1
+# elif H5Ovisit_by_name_vers == 2
+h5o_visit_by_name :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> H5O_iterate_t a -> InOut a -> CUInt -> HId_t -> IO HErr_t
+h5o_visit_by_name = h5o_visit_by_name2
+# elif H5Ovisit_by_name_vers == 3
+# ccall H5Ovisit_by_name3, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate_t a -> InOut a -> CUInt -> <hid_t> -> IO <herr_t>
+h5o_visit_by_name :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> H5O_iterate_t a -> InOut a -> CUInt -> HId_t -> IO HErr_t
+h5o_visit_by_name = h5o_visit_by_name3
+# else
+#  error TODO
+# endif
+#else
 #ccall H5Ovisit_by_name, <hid_t> -> CString -> <H5_index_t> -> <H5_iter_order_t> -> H5O_iterate_t a -> InOut a -> <hid_t> -> IO <herr_t>
-
--- |Close an open file object.
---
--- This is the companion to 'h5o_open'. It is used to close any
--- open object in an HDF5 file (but not IDs are that not file
--- objects, such as property lists and dataspaces). It has
--- the same effect as calling 'h5g_close', 'h5d_close', or 'h5t_close'.
---
--- Returns non-negative on success, negative on failure.
---
--- > herr_t H5Oclose(hid_t object_id);
-#ccall H5Oclose, <hid_t> -> IO <herr_t>
-
-#if H5_VERSION_GE(1,10,0)
-
--- > herr_t H5Oflush(hid_t obj_id);
-#ccall H5Oflush, <hid_t> -> IO <herr_t>
-
--- > herr_t H5Orefresh(hid_t oid);
-#ccall H5Orefresh, <hid_t> -> IO <herr_t>
-
--- > herr_t H5Odisable_mdc_flushes(hid_t object_id);
-#ccall H5Odisable_mdc_flushes, <hid_t> -> IO <herr_t>
-
--- > herr_t H5Oenable_mdc_flushes(hid_t object_id);
-#ccall H5Oenable_mdc_flushes, <hid_t> -> IO <herr_t>
-
--- > herr_t H5Oare_mdc_flushes_disabled(hid_t object_id, hbool_t *are_disabled);
-#ccall H5Oare_mdc_flushes_disabled, <hid_t> -> Out hbool_t -> IO <herr_t>
-
+h5o_visit_by_name1 :: HId_t -> CString -> H5_index_t -> H5_iter_order_t -> H5O_iterate_t a -> InOut a -> HId_t -> IO HErr_t
+h5o_visit_by_name1 = h5o_visit_by_name
 #endif
-
-#ifndef H5_NO_DEPRECATED_SYMBOLS
-
--- * Deprecated types
-
--- |A struct that's part of the 'h5g_stat_t' routine (deprecated)
-#starttype H5O_stat_t
-
--- |Total size of object header in file
-#field size,    <hsize_t>
-
--- |Free space within object header
-#field free,    <hsize_t>
-
--- |Number of object header messages
-#field nmesgs,  CUInt
-
--- |Number of object header chunks
-#field nchunks, CUInt
-
-#stoptype
-
-#endif /* H5_NO_DEPRECATED_SYMBOLS */
diff --git a/src/Bindings/HDF5/Raw/H5P.hsc b/src/Bindings/HDF5/Raw/H5P.hsc
--- a/src/Bindings/HDF5/Raw/H5P.hsc
+++ b/src/Bindings/HDF5/Raw/H5P.hsc
@@ -57,11 +57,6 @@
 #cinline H5P_LINK_CREATE_DEFAULT,           <hid_t>
 #cinline H5P_LINK_ACCESS_DEFAULT,           <hid_t>
 
-#if !H5_VERSION_GE(1,8,18)
-#cinline H5P_ATTRIBUTE_ACCESS,              <hid_t>
-#cinline H5P_ATTRIBUTE_ACCESS_DEFAULT,      <hid_t>
-#endif
-
 -- |Default value for all property list classes
 #newtype_const hid_t, H5P_DEFAULT
 
@@ -136,16 +131,6 @@
 -- >     size_t size, void *value);
 type H5P_prp_get_func_t    a = FunPtr (HId_t -> CString -> CSize -> InOut a -> IO HErr_t)
 
-#if H5_VERSION_GE(1,10,0)
-
--- > typedef herr_t (*H5P_prp_encode_func_t)(const void *value, void **buf, size_t *size);
-type H5P_prp_encode_func_t a b = FunPtr (In a -> Out b -> Out CSize)
-
--- > typedef herr_t (*H5P_prp_decode_func_t)(const void **buf, void *value);
-type H5P_prp_decode_func_t a b = FunPtr (In a -> Out b)
-
-#endif
-
 -- |Parameters:
 --
 -- [@ prop_id :: 'HId_t'   @] The ID of the property list the property is deleted from.
@@ -230,8 +215,6 @@
 -- > typedef herr_t (*H5P_iterate_t)(hid_t id, const char *name, void *iter_data);
 type H5P_iterate_t a = FunPtr (HId_t -> CString -> InOut a -> IO HErr_t)
 
-#if H5_VERSION_GE(1,8,8)
-
 -- |Actual IO mode property
 #newtype H5D_mpio_actual_chunk_opt_mode_t
 
@@ -242,10 +225,6 @@
 #newtype_const H5D_mpio_actual_chunk_opt_mode_t, H5D_MPIO_LINK_CHUNK
 #newtype_const H5D_mpio_actual_chunk_opt_mode_t, H5D_MPIO_MULTI_CHUNK
 
-#if H5_VERSION_LE(1,8,10)
-#newtype_const H5D_mpio_actual_chunk_opt_mode_t, H5D_MPIO_MULTI_CHUNK_NO_OPT
-#endif
-
 -- |The following four values are conveniently defined as a bit field so that
 -- we can switch from the default to indpendent or collective and then to
 -- mixed without having to check the original value.
@@ -264,10 +243,6 @@
 -- |The contiguous case is separate from the bit field.
 #newtype_const H5D_mpio_actual_io_mode_t, H5D_MPIO_CONTIGUOUS_COLLECTIVE
 
-#endif
-
-#if H5_VERSION_GE(1,8,10)
-
 -- | Broken collective IO property
 #newtype H5D_mpio_no_collective_cause_t
 
@@ -278,14 +253,6 @@
 #newtype_const H5D_mpio_no_collective_cause_t, H5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES
 #newtype_const H5D_mpio_no_collective_cause_t, H5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET
 
-#if H5_VERSION_GE(1,10,2)
-#newtype_const H5D_mpio_no_collective_cause_t, H5D_MPIO_NO_COLLECTIVE_MAX_CAUSE
-#else
-#newtype_const H5D_mpio_no_collective_cause_t, H5D_MPIO_FILTERS
-#endif
-
-#endif
-
 -- /*********************/
 -- /* Public Prototypes */
 -- /*********************/
@@ -531,16 +498,6 @@
 -- > htri_t H5Pexist(hid_t plist_id, const char *name);
 #ccall H5Pexist, <hid_t> -> CString -> IO <htri_t>
 
-#if H5_VERSION_GE(1,10,0)
-
--- > herr_t H5Pencode(hid_t plist_id, void *buf, size_t *nalloc);
-#ccall H5Pencode, <hid_t> ->  In a -> Out <size_t> -> IO <herr_t>
-
--- > H5_DLL hid_t  H5Pdecode(const void *buf);
-#ccall H5Pdecode, In a -> IO <hid_t>
-
-#endif
-
 -- |Routine to query the size of a property in a property list or class.
 --
 -- This routine retrieves the size of a property's value in bytes.  Zero-
@@ -1182,16 +1139,6 @@
 -- > herr_t H5Pget_shared_mesg_phase_change(hid_t plist_id, unsigned *max_list, unsigned *min_btree);
 #ccall H5Pget_shared_mesg_phase_change, <hid_t> -> Out CUInt -> Out CUInt -> IO <herr_t>
 
-#if H5_VERSION_GE(1,10,0)
-
--- > H5_DLL herr_t H5Pset_file_space(hid_t plist_id, H5F_file_space_type_t strategy, hsize_t threshold);
-#ccall H5Pset_file_space, <hid_t> -> H5F_file_space_type_t -> <hsize_t> -> IO <herr_t>
-
--- > H5_DLL herr_t H5Pget_file_space(hid_t plist_id, H5F_file_space_type_t *strategy, hsize_t *threshold);
-#ccall H5Pget_file_space, <hid_t> -> Out H5F_file_space_type_t -> Out <hsize_t> -> IO <herr_t>
-
-#endif
-
 -- * File access property list (FAPL) routines
 
 -- |Sets the alignment properties of a file access property list
@@ -1563,8 +1510,6 @@
 -- >     H5F_libver_t *high);
 #ccall H5Pget_libver_bounds, <hid_t> -> Out H5F_libver_t -> Out H5F_libver_t -> IO <herr_t>
 
-#if H5_VERSION_GE(1,8,7)
-
 -- |Sets the number of files opened through external links
 -- from the file associated with this fapl to be held open
 -- in that file's external file cache.  When the maximum
@@ -1587,10 +1532,6 @@
 -- > herr_t H5Pget_elink_file_cache_size(hid_t plist_id, unsigned *efc_size);
 #ccall H5Pget_elink_file_cache_size, <hid_t> -> Out CUInt -> IO <herr_t>
 
-#endif
-
-#if H5_VERSION_GE(1,8,9)
-
 -- |Sets the initial file image. Some file drivers can initialize
 -- the starting data in a file from a buffer.
 --
@@ -1646,34 +1587,6 @@
 -- >    H5FD_file_image_callbacks_t *callbacks_ptr);
 #ccall H5Pget_file_image_callbacks, <hid_t> -> Out H5FD_file_image_callbacks_t -> IO <herr_t>
 
-#endif
-
-#if H5_VERSION_GE(1,10,0)
-
--- > herr_t H5Pset_metadata_read_attempts(hid_t plist_id, unsigned attempts);
-#ccall H5Pget_metadata_read_attempts, <hid_t> -> Out CUInt -> IO <herr_t>
--- > herr_t H5Pset_object_flush_cb(hid_t plist_id, H5F_flush_cb_t func, void *udata);
-#ccall H5Pset_object_flush_cb , <hid_t> -> H5F_flush_cb_t a -> Out a -> IO <herr_t>
--- > herr_t H5Pget_object_flush_cb(hid_t plist_id, H5F_flush_cb_t *func, void **udata);
-#ccall H5Pget_object_flush_cb, <hid_t> -> H5F_flush_cb_t a -> Out (Out a) -> IO <herr_t>
--- > herr_t H5Pset_mdc_log_options(hid_t plist_id, hbool_t is_enabled, const char *location, hbool_t start_on_access);
-#ccall H5Pset_mdc_log_options, <hid_t> -> <hbool_t> -> CString -> <hbool_t> -> IO <herr_t>
--- > herr_t H5Pget_mdc_log_options(hid_t plist_id, hbool_t *is_enabled, char *location, size_t *location_size, hbool_t *start_on_access);
-#ccall H5Pget_mdc_log_options, <hid_t> -> Out <hbool_t> -> Out CString -> Out <size_t> -> Out <hbool_t> -> IO <herr_t>
-
-#ifdef H5_HAVE_PARALLEL
--- > herr_t H5Pset_coll_metadata_read(hid_t plist_id, hbool_t is_collective);
-#ccall H5Pset_all_coll_metadata_ops, <hid_t> -> <hbool_t> -> IO <herr_t>
--- > herr_t H5Pget_coll_metadata_read(hid_t plist_id, hbool_t *is_collective);
-#ccall H5Pget_all_coll_metadata_ops, <hid_t> -> Out <hbool_t> -> IO <herr_t>
--- > herr_t H5Pset_coll_metadata_write(hid_t plist_id, hbool_t is_collective);
-#ccall H5Pset_coll_metadata_write, <hid_t> -> <hbool_t> -> IO <herr_t>
--- > herr_t H5Pget_coll_metadata_write(hid_t plist_id, hbool_t *is_collective);
-#ccall H5Pget_coll_metadata_write, <hid_t> -> Out <hbool_t> -> IO <herr_t>
-#endif /* H5_HAVE_PARALLEL */
-
-#endif
-
 -- * Dataset creation property list (DCPL) routines
 
 -- |Sets the layout of raw data in the file.
@@ -1712,25 +1625,6 @@
 -- > int H5Pget_chunk(hid_t plist_id, int max_ndims, hsize_t dim[]/*out*/);
 #ccall H5Pget_chunk, <hid_t> -> CInt -> OutArray <hsize_t> -> IO CInt
 
-#if H5_VERSION_GE(1,10,0)
--- > herr_t H5Pset_virtual(hid_t dcpl_id, hid_t vspace_id,
--- >     const char *src_file_name, const char *src_dset_name, hid_t src_space_id);
-#ccall H5Pset_virtual, <hid_t> -> <hid_t> -> CString -> CString -> <hid_t> -> IO <herr_t>
--- > herr_t H5Pget_virtual_count(hid_t dcpl_id, size_t *count/*out*/);
-#ccall H5Pget_virtual_count, <hid_t> -> Out <size_t> -> IO <herr_t>
--- > hid_t H5Pget_virtual_vspace(hid_t dcpl_id, size_t index);
-#ccall H5Pget_virtual_vspace, <hid_t> -> <size_t> -> IO <hid_t>
--- > hid_t H5Pget_virtual_srcspace(hid_t dcpl_id, size_t index);
-#ccall H5Pget_virtual_srcspace, <hid_t> -> <size_t> -> IO <hid_t>
--- > ssize_t H5Pget_virtual_filename(hid_t dcpl_id, size_t index,
--- >     char *name/*out*/, size_t size);
-#ccall H5Pget_virtual_filename, <hid_t> -> <size_t> -> Out CString -> <size_t> -> IO <ssize_t>
--- > ssize_t H5Pget_virtual_dsetname(hid_t dcpl_id, size_t index,
--- >     char *name/*out*/, size_t size);
-#ccall H5Pget_virtual_dsetname, <hid_t> -> <size_t> -> Out CString -> <size_t> -> IO <ssize_t>
-
-#endif
-
 -- |Adds an external file to the list of external files. 'plist_id'
 -- should be an object ID for a dataset creation property list.
 -- 'name' is the name of an external file, 'offset' is the location
@@ -1748,15 +1642,6 @@
 -- >           hsize_t size);
 #ccall H5Pset_external, <hid_t> -> CString -> <off_t> -> <hsize_t> -> IO <herr_t>
 
-#if H5_VERSION_GE(1,10,0)
-
--- > herr_t H5Pset_chunk_opts(hid_t plist_id, unsigned opts);
-#ccall H5Pset_chunk_opts, <hid_t> -> CUInt -> IO <herr_t>
--- > herr_t H5Pget_chunk_opts(hid_t plist_id, unsigned *opts);
-#ccall H5Pget_chunk_opts, <hid_t> -> Out CUInt -> IO <herr_t>
-
-#endif
-
 -- |Returns the number of external files for this dataset, or negative
 -- on failure.
 --
@@ -1905,9 +1790,6 @@
 -- >    *fill_time/*out*/);
 #ccall H5Pget_fill_time, <hid_t> -> Out <H5D_fill_time_t> -> IO <herr_t>
 
-
-#if H5_VERSION_GE(1,8,3)
-
 -- * Dataset access property list (DAPL) routines
 
 -- |Set the number of objects in the meta data cache and the
@@ -1950,31 +1832,6 @@
 -- >        double *rdcc_w0/*out*/);
 #ccall H5Pget_chunk_cache, <hid_t> -> Out <size_t> -> Out <size_t> -> Out CDouble -> IO <herr_t>
 
-#endif
-
-#if H5_VERSION_GE(1,10,0)
-
--- > +H5_DLL herr_t H5Pset_virtual_view(hid_t plist_id, H5D_vds_view_t view);
-#ccall H5Pset_virtual_view, <hid_t> -> H5D_vds_view_t -> IO <herr_t>
--- > +H5_DLL herr_t H5Pget_virtual_view(hid_t plist_id, H5D_vds_view_t *view);
-#ccall H5Pget_virtual_view, <hid_t> -> Out H5D_vds_view_t -> IO <herr_t>
--- > +H5_DLL herr_t H5Pset_virtual_printf_gap(hid_t plist_id, hsize_t gap_size);
-#ccall H5Pset_virtual_printf_gap, <hid_t> ->  <hsize_t> -> IO <herr_t>
--- > +H5_DLL herr_t H5Pget_virtual_printf_gap(hid_t plist_id, hsize_t *gap_size);
-#ccall H5Pget_virtual_printf_gap, <hid_t> -> Out <hsize_t> -> IO <herr_t>
--- > +H5_DLL herr_t H5Pset_append_flush(hid_t plist_id, unsigned ndims,
--- > +    const hsize_t boundary[], H5D_append_cb_t func, void *udata);
-#ccall H5Pset_append_flush, <hid_t> -> CUInt -> In <hsize_t> -> H5D_append_cb_t a -> In a -> IO <herr_t>
--- > +H5_DLL herr_t H5Pget_append_flush(hid_t plist_id, unsigned dims,
--- > +    hsize_t boundary[], H5D_append_cb_t *func, void **udata);
-#ccall H5Pget_append_flush, <hid_t> -> CUInt -> In <hsize_t> -> H5D_append_cb_t a -> Out (Out a) -> IO <herr_t>
--- > herr_t H5Pset_efile_prefix(hid_t dapl_id, const char* prefix);
-#ccall H5Pset_efile_prefix, <hid_t> -> CString -> IO <herr_t>
--- > ssize_t H5Pget_efile_prefix(hid_t dapl_id, char* prefix /*out*/, size_t size);
-#ccall H5Pget_efile_prefix, <hid_t> -> Out CString -> <size_t> -> IO <ssize_t>
-
-#endif
-
 -- * Dataset xfer property list (DXPL) routines
 
 -- |Sets data transform expression.
@@ -2163,8 +2020,6 @@
 
 #ifdef H5_HAVE_PARALLEL
 
-#if H5_VERSION_GE(1,8,8)
-
 -- TODO: docs
 -- > herr_t H5Pget_mpio_actual_chunk_opt_mode(hid_t plist_id, H5D_mpio_actual_chunk_opt_mode_t *actual_chunk_opt_mode);
 #ccall H5Pget_mpio_actual_chunk_opt_mode, <hid_t> -> Out H5D_mpio_actual_chunk_opt_mode_t -> IO <herr_t>
@@ -2172,16 +2027,10 @@
 -- > herr_t H5Pget_mpio_actual_io_mode(hid_t plist_id, H5D_mpio_actual_io_mode_t *actual_io_mode);
 #ccall H5Pget_mpio_actual_io_mode, <hid_t> -> Out H5D_mpio_actual_io_mode_t -> IO <herr_t>
 
-#endif
-
-#if H5_VERSION_GE(1,8,10)
-
 -- TODO: ensure ptr sizes match and change Word32 to H5D_mpio_no_collective_cause_t
 -- > herr_t H5Pget_mpio_no_collective_cause(hid_t plist_id, uint32_t *local_no_collective_cause, uint32_t *global_no_collective_cause);
 #ccall H5Pget_mpio_no_collective_cause, <hid_t> -> Out Word32 -> Out Word32 -> IO <herr_t>
 
-#endif
-
 #endif /* H5_HAVE_PARALLEL */
 
 -- * Link creation property list (LCPL) routines
@@ -2339,8 +2188,6 @@
 -- > ssize_t H5Pget_elink_prefix(hid_t plist_id, char *prefix, size_t size);
 #ccall H5Pget_elink_prefix, <hid_t> -> OutArray CChar -> <size_t> -> IO <ssize_t>
 
-#if H5_VERSION_GE(1,8,2)
-
 -- |Gets the file access property list identifier that is
 -- set for link access property.
 --
@@ -2356,10 +2203,6 @@
 -- > herr_t H5Pset_elink_fapl(hid_t lapl_id, hid_t fapl_id);
 #ccall H5Pset_elink_fapl, <hid_t> -> <hid_t> -> IO <herr_t>
 
-#endif
-
-#if H5_VERSION_GE(1,8,3)
-
 -- |Sets the file access flags to be used when traversing an
 -- external link.  This should be either 'h5f_ACC_RDONLY' or
 -- 'h5f_ACC_RDWR', or 'h5f_ACC_DEFAULT' to unset the value.
@@ -2394,8 +2237,6 @@
 -- > herr_t H5Pget_elink_cb(hid_t lapl_id, H5L_elink_traverse_t *func, void **op_data);
 #ccall H5Pget_elink_cb, <hid_t> -> Out (H5L_elink_traverse_t a) -> Out (Ptr a) -> IO <herr_t>
 
-#endif
-
 -- * Object copy property list (OCPYPL) routines
 
 -- |Set properties when copying an object (group, dataset, and datatype)
@@ -2431,8 +2272,6 @@
 -- > herr_t H5Pget_copy_object(hid_t plist_id, unsigned *crt_intmd /*out*/);
 #ccall H5Pget_copy_object, <hid_t> -> Out CUInt -> IO <herr_t>
 
-#if H5_VERSION_GE(1,8,9)
-
 -- TODO: finish
 
 -- |Adds path to the list of paths to search first in the
@@ -2491,6 +2330,93 @@
 -- > herr_t H5Pget_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t *func, void **op_data);
 #ccall H5Pget_mcdt_search_cb, <hid_t> -> Out (H5O_mcdt_search_cb_t a) -> Out (InOut a) -> IO <herr_t>
 
+
+-- > herr_t H5Pencode(hid_t plist_id, void *buf, size_t *nalloc);
+#ccall H5Pencode, <hid_t> ->  In a -> Out <size_t> -> IO <herr_t>
+
+-- > H5_DLL hid_t  H5Pdecode(const void *buf);
+#ccall H5Pdecode, In a -> IO <hid_t>
+
+-- > typedef herr_t (*H5P_prp_encode_func_t)(const void *value, void **buf, size_t *size);
+type H5P_prp_encode_func_t a b = FunPtr (In a -> Out b -> Out CSize)
+
+-- > typedef herr_t (*H5P_prp_decode_func_t)(const void **buf, void *value);
+type H5P_prp_decode_func_t a b = FunPtr (In a -> Out b)
+
+-- > H5_DLL herr_t H5Pset_file_space(hid_t plist_id, H5F_file_space_type_t strategy, hsize_t threshold);
+#ccall H5Pset_file_space, <hid_t> -> H5F_file_space_type_t -> <hsize_t> -> IO <herr_t>
+
+-- > H5_DLL herr_t H5Pget_file_space(hid_t plist_id, H5F_file_space_type_t *strategy, hsize_t *threshold);
+#ccall H5Pget_file_space, <hid_t> -> Out H5F_file_space_type_t -> Out <hsize_t> -> IO <herr_t>
+
+-- > herr_t H5Pset_metadata_read_attempts(hid_t plist_id, unsigned attempts);
+#ccall H5Pget_metadata_read_attempts, <hid_t> -> Out CUInt -> IO <herr_t>
+-- > herr_t H5Pset_object_flush_cb(hid_t plist_id, H5F_flush_cb_t func, void *udata);
+#ccall H5Pset_object_flush_cb , <hid_t> -> H5F_flush_cb_t a -> Out a -> IO <herr_t>
+-- > herr_t H5Pget_object_flush_cb(hid_t plist_id, H5F_flush_cb_t *func, void **udata);
+#ccall H5Pget_object_flush_cb, <hid_t> -> H5F_flush_cb_t a -> Out (Out a) -> IO <herr_t>
+-- > herr_t H5Pset_mdc_log_options(hid_t plist_id, hbool_t is_enabled, const char *location, hbool_t start_on_access);
+#ccall H5Pset_mdc_log_options, <hid_t> -> <hbool_t> -> CString -> <hbool_t> -> IO <herr_t>
+-- > herr_t H5Pget_mdc_log_options(hid_t plist_id, hbool_t *is_enabled, char *location, size_t *location_size, hbool_t *start_on_access);
+#ccall H5Pget_mdc_log_options, <hid_t> -> Out <hbool_t> -> Out CString -> Out <size_t> -> Out <hbool_t> -> IO <herr_t>
+
+-- > herr_t H5Pset_virtual(hid_t dcpl_id, hid_t vspace_id,
+-- >     const char *src_file_name, const char *src_dset_name, hid_t src_space_id);
+#ccall H5Pset_virtual, <hid_t> -> <hid_t> -> CString -> CString -> <hid_t> -> IO <herr_t>
+-- > herr_t H5Pget_virtual_count(hid_t dcpl_id, size_t *count/*out*/);
+#ccall H5Pget_virtual_count, <hid_t> -> Out <size_t> -> IO <herr_t>
+-- > hid_t H5Pget_virtual_vspace(hid_t dcpl_id, size_t index);
+#ccall H5Pget_virtual_vspace, <hid_t> -> <size_t> -> IO <hid_t>
+-- > hid_t H5Pget_virtual_srcspace(hid_t dcpl_id, size_t index);
+#ccall H5Pget_virtual_srcspace, <hid_t> -> <size_t> -> IO <hid_t>
+-- > ssize_t H5Pget_virtual_filename(hid_t dcpl_id, size_t index,
+-- >     char *name/*out*/, size_t size);
+#ccall H5Pget_virtual_filename, <hid_t> -> <size_t> -> Out CString -> <size_t> -> IO <ssize_t>
+-- > ssize_t H5Pget_virtual_dsetname(hid_t dcpl_id, size_t index,
+-- >     char *name/*out*/, size_t size);
+#ccall H5Pget_virtual_dsetname, <hid_t> -> <size_t> -> Out CString -> <size_t> -> IO <ssize_t>
+
+-- > herr_t H5Pset_chunk_opts(hid_t plist_id, unsigned opts);
+#ccall H5Pset_chunk_opts, <hid_t> -> CUInt -> IO <herr_t>
+-- > herr_t H5Pget_chunk_opts(hid_t plist_id, unsigned *opts);
+#ccall H5Pget_chunk_opts, <hid_t> -> Out CUInt -> IO <herr_t>
+
+-- > +H5_DLL herr_t H5Pset_virtual_view(hid_t plist_id, H5D_vds_view_t view);
+#ccall H5Pset_virtual_view, <hid_t> -> H5D_vds_view_t -> IO <herr_t>
+-- > +H5_DLL herr_t H5Pget_virtual_view(hid_t plist_id, H5D_vds_view_t *view);
+#ccall H5Pget_virtual_view, <hid_t> -> Out H5D_vds_view_t -> IO <herr_t>
+-- > +H5_DLL herr_t H5Pset_virtual_printf_gap(hid_t plist_id, hsize_t gap_size);
+#ccall H5Pset_virtual_printf_gap, <hid_t> ->  <hsize_t> -> IO <herr_t>
+-- > +H5_DLL herr_t H5Pget_virtual_printf_gap(hid_t plist_id, hsize_t *gap_size);
+#ccall H5Pget_virtual_printf_gap, <hid_t> -> Out <hsize_t> -> IO <herr_t>
+-- > +H5_DLL herr_t H5Pset_append_flush(hid_t plist_id, unsigned ndims,
+-- > +    const hsize_t boundary[], H5D_append_cb_t func, void *udata);
+#ccall H5Pset_append_flush, <hid_t> -> CUInt -> In <hsize_t> -> H5D_append_cb_t a -> In a -> IO <herr_t>
+-- > +H5_DLL herr_t H5Pget_append_flush(hid_t plist_id, unsigned dims,
+-- > +    hsize_t boundary[], H5D_append_cb_t *func, void **udata);
+#ccall H5Pget_append_flush, <hid_t> -> CUInt -> In <hsize_t> -> H5D_append_cb_t a -> Out (Out a) -> IO <herr_t>
+-- > herr_t H5Pset_efile_prefix(hid_t dapl_id, const char* prefix);
+#ccall H5Pset_efile_prefix, <hid_t> -> CString -> IO <herr_t>
+-- > ssize_t H5Pget_efile_prefix(hid_t dapl_id, char* prefix /*out*/, size_t size);
+#ccall H5Pget_efile_prefix, <hid_t> -> Out CString -> <size_t> -> IO <ssize_t>
+
+#ifdef H5_HAVE_PARALLEL
+
+-- > herr_t H5Pset_coll_metadata_read(hid_t plist_id, hbool_t is_collective);
+#ccall H5Pset_all_coll_metadata_ops, <hid_t> -> <hbool_t> -> IO <herr_t>
+-- > herr_t H5Pget_coll_metadata_read(hid_t plist_id, hbool_t *is_collective);
+#ccall H5Pget_all_coll_metadata_ops, <hid_t> -> Out <hbool_t> -> IO <herr_t>
+-- > herr_t H5Pset_coll_metadata_write(hid_t plist_id, hbool_t is_collective);
+#ccall H5Pset_coll_metadata_write, <hid_t> -> <hbool_t> -> IO <herr_t>
+-- > herr_t H5Pget_coll_metadata_write(hid_t plist_id, hbool_t *is_collective);
+#ccall H5Pget_coll_metadata_write, <hid_t> -> Out <hbool_t> -> IO <herr_t>
+
+#endif
+
+#if H5_VERSION_GE(1,10,2)
+#newtype_const H5D_mpio_no_collective_cause_t, H5D_MPIO_NO_COLLECTIVE_MAX_CAUSE
+#else
+#newtype_const H5D_mpio_no_collective_cause_t, H5D_MPIO_FILTERS
 #endif
 
 #ifndef H5_NO_DEPRECATED_SYMBOLS
diff --git a/src/Bindings/HDF5/Raw/H5R.hsc b/src/Bindings/HDF5/Raw/H5R.hsc
--- a/src/Bindings/HDF5/Raw/H5R.hsc
+++ b/src/Bindings/HDF5/Raw/H5R.hsc
@@ -77,28 +77,6 @@
 -- >        H5R_type_t ref_type, hid_t space_id);
 #ccall H5Rcreate, Out a -> <hid_t> -> CString -> <H5R_type_t> -> <hid_t> -> IO <herr_t>
 
--- |Opens the HDF5 object referenced.  Given a reference to some object,
--- open that object and return an ID for that object.
---
--- Parameters:
---
--- [@ id       :: 'HId_t'      @]   Dataset reference object is in or location ID of object that the dataset is located within.
---
--- [@ ref_type :: 'H5R_type_t' @]   Type of reference to create
---
--- [@ ref      :: 'In' a       @]   Reference to open.
---
--- Returns a valid ID on success, negative on failure
---
--- > hid_t H5Rdereference(hid_t dataset, H5R_type_t ref_type, const void *ref);
-#if H5_VERSION_GE(1,10,0)
-#ccall H5Rdereference1, <hid_t> -> <H5R_type_t> -> In a -> IO <hid_t>
--- > hid_t H5Rdereference2(hid_t obj_id, hid_t oapl_id, H5R_type_t ref_type, const void *ref);
-#ccall H5Rdereference2,  <hid_t> -> <hid_t> -> <H5R_type_t> -> In a -> IO <hid_t>
-#else
-#ccall H5Rdereference, <hid_t> -> <H5R_type_t> -> In a -> IO <hid_t>
-#endif
-
 -- |Retrieves a dataspace with the region pointed to selected.
 -- Given a reference to some object, creates a copy of the dataset pointed
 -- to's dataspace and defines a selection in the copy which is the region
@@ -159,6 +137,48 @@
 -- >     char *name/*out*/, size_t size);
 #ccall H5Rget_name, <hid_t> -> <H5R_type_t> -> In a -> OutArray CChar -> <size_t> -> IO <ssize_t>
 
+--------------------------
+-- Compatibility Macros --
+--------------------------
+
+-- H5Rdereference
+
+-- |Opens the HDF5 object referenced.  Given a reference to some object,
+-- open that object and return an ID for that object.
+--
+-- Parameters:
+--
+-- [@ id       :: 'HId_t'      @]   Dataset reference object is in or location ID of object that the dataset is located within.
+--
+-- [@ ref_type :: 'H5R_type_t' @]   Type of reference to create
+--
+-- [@ ref      :: 'In' a       @]   Reference to open.
+--
+-- Returns a valid ID on success, negative on failure
+--
+-- > hid_t H5Rdereference(hid_t dataset, H5R_type_t ref_type, const void *ref);
+
+-- > hid_t H5Rdereference2(hid_t obj_id, hid_t oapl_id, H5R_type_t ref_type, const void *ref);
+
+#if defined(H5Rdereference_vers)
+# ccall H5Rdereference1, <hid_t> -> <H5R_type_t> -> In a -> IO <hid_t>
+# ccall H5Rdereference2, <hid_t> -> <hid_t> -> <H5R_type_t> -> In a -> IO <hid_t>
+# if H5Rdereference_vers == 1
+h5r_dereference :: HId_t -> H5R_type_t -> In a -> IO HId_t
+h5r_dereference = h5r_dereference1
+# elif H5Rdereference_vers == 2
+h5r_dereference :: HId_t -> HId_t -> H5R_type_t -> In a -> IO HId_t
+h5r_dereference = h5r_dereference2
+# else
+#  error TODO
+# endif
+#else
+# ccall H5Rdereference, <hid_t> -> <H5R_type_t> -> In a -> IO <hid_t>
+#endif
+
+------------------------
+-- Deprecated symbols --
+------------------------
 
 #ifndef H5_NO_DEPRECATED_SYMBOLS
 
diff --git a/src/Bindings/HDF5/Raw/H5S.hsc b/src/Bindings/HDF5/Raw/H5S.hsc
--- a/src/Bindings/HDF5/Raw/H5S.hsc
+++ b/src/Bindings/HDF5/Raw/H5S.hsc
@@ -162,23 +162,6 @@
 -- > herr_t H5Sclose(hid_t space_id);
 #ccall H5Sclose, <hid_t> -> IO <herr_t>
 
--- |Given a dataspace ID, converts the object description
--- (including selection) into binary in a buffer.
---
--- 'nalloc' is the size of the buffer on input, the size of the encoded
--- data on output.  If the buffer is not big enough, no data is written
--- to it (but nalloc is still updated with the size needed).
---
--- Returns non-negative on success, negative on failure.
---
-#if H5_VERSION_GE(1,12,0)
-# ccall H5Sencode2, <hid_t> -> OutArray CChar -> InOut <size_t> -> <hid_t> -> IO <herr_t>
-# ccall H5Sencode1, <hid_t> -> OutArray CChar -> InOut <size_t> -> IO <herr_t>
-h5s_encode = h5s_encode1
-#else
-# ccall H5Sencode,  <hid_t> -> OutArray CChar -> InOut <size_t> -> IO <herr_t>
-#endif
-
 -- |Decode a binary object description of dataspace and
 -- return a new object handle.
 --
@@ -426,16 +409,12 @@
 -- > htri_t H5Sselect_valid(hid_t spaceid);
 #ccall H5Sselect_valid, <hid_t> -> IO <htri_t>
 
-#if H5_VERSION_GE(1,10,0)
-
 -- > htri_t H5Sis_regular_hyperslab(hid_t spaceid);
 #ccall H5Sis_regular_hyperslab, <hid_t> -> IO <htri_t>
 -- > htri_t H5Sget_regular_hyperslab(hid_t spaceid, hsize_t start[],
 -- >     hsize_t stride[], hsize_t count[], hsize_t block[]);
 #ccall H5Sget_regular_hyperslab, <hid_t> -> InArray <hsize_t> -> InArray <hsize_t> -> InArray <hsize_t> -> InArray <hsize_t> -> IO <htri_t>
 
-#endif
-
 -- |Get the number of hyperslab blocks in current hyperslab selection
 --
 -- Returns negative on failure
@@ -540,3 +519,36 @@
 
 -- H5S_sel_type H5Sget_select_type(hid_t spaceid);
 #ccall H5Sget_select_type, <hid_t> -> IO <H5S_sel_type>
+
+--------------------------
+-- Compatibility Macros --
+--------------------------
+
+
+-- |Given a dataspace ID, converts the object description
+-- (including selection) into binary in a buffer.
+--
+-- 'nalloc' is the size of the buffer on input, the size of the encoded
+-- data on output.  If the buffer is not big enough, no data is written
+-- to it (but nalloc is still updated with the size needed).
+--
+-- Returns non-negative on success, negative on failure.
+--
+
+#if defined(H5Sencode_vers)
+# ccall H5Sencode1,  <hid_t> -> OutArray CChar -> InOut <size_t> -> IO <herr_t>
+# ccall H5Sencode2,  <hid_t> -> OutArray CChar -> InOut <size_t> -> <hid_t> -> IO <herr_t>
+# if H5Sencode_vers == 1
+h5s_encode :: HId_t -> OutArray CChar -> InOut CSize -> IO HErr_t
+h5s_encode = h5s_encode1
+# elif H5Sencode_vers == 2
+h5s_encode :: HId_t -> OutArray CChar -> InOut CSize -> HId_t -> IO HErr_t
+h5s_encode = h5s_encode2
+# else
+#  error TODO
+# endif
+#else
+# ccall H5Sencode, <hid_t> -> OutArray CChar -> InOut <size_t> -> IO <herr_t>
+h5s_encode1 :: HId_t -> OutArray CChar -> InOut CSize -> IO HErr_t
+h5s_encode1 = h5s_encode
+#endif
diff --git a/src/Bindings/HDF5/Raw/H5T.hsc b/src/Bindings/HDF5/Raw/H5T.hsc
--- a/src/Bindings/HDF5/Raw/H5T.hsc
+++ b/src/Bindings/HDF5/Raw/H5T.hsc
@@ -77,10 +77,8 @@
 -- |VAX mixed endian
 #newtype_const H5T_order_t, H5T_ORDER_VAX
 
-#if H5_VERSION_GE(1,8,6)
 -- |Compound type with mixed member orders
 #newtype_const H5T_order_t, H5T_ORDER_MIXED
-#endif
 
 -- |no particular order (strings, bits,..)
 #newtype_const H5T_order_t, H5T_ORDER_NONE
@@ -698,14 +696,11 @@
 -- > hid_t H5Tdecode(const void *buf);
 #ccall H5Tdecode, InArray a -> IO <hid_t>
 
-#if H5_VERSION_GE(1,10,0)
-
 -- > herr_t H5Tflush(hid_t type_id);
 #ccall H5Tflush, <hid_t> -> IO <herr_t>
+
 -- > herr_t H5Trefresh(hid_t type_id);
 #ccall H5Trefresh, <hid_t> -> IO <herr_t>
-
-#endif
 
 -- * Operations defined on compound datatypes
 
diff --git a/test/Spec/Group.hs b/test/Spec/Group.hs
--- a/test/Spec/Group.hs
+++ b/test/Spec/Group.hs
@@ -4,11 +4,8 @@
 
 import           Test.Hspec
 
-import           Bindings.HDF5.Core    (IndexType (..), IterOrder (..), hid)
-import qualified Bindings.HDF5.Group   as G
+import           Bindings.HDF5.Core    (IndexType (..), IterOrder (..))
 import qualified Bindings.HDF5.Link    as L
-import qualified Bindings.HDF5.Object  as OB
-import qualified Data.ByteString.Char8 as BS
 
 import           Spec.Util
 
diff --git a/test/Spec/Util.hs b/test/Spec/Util.hs
--- a/test/Spec/Util.hs
+++ b/test/Spec/Util.hs
@@ -25,7 +25,7 @@
     release file = do F.closeFile file
 
 withTestFile' :: (F.File -> IO a) -> IO a
-withTestFile' callback = withTestFile (\path file -> callback file)
+withTestFile' callback = withTestFile (\_path file -> callback file)
 
 withGroup :: BS.ByteString -> (F.File -> IO a) -> IO a
 withGroup name f = withTestFile' $ \file -> do
